home *** CD-ROM | disk | FTP | other *** search
/ PC World 1999 February / PCWorld_1999-02_cd.bin / software / Komer / lotus / Fax Services / INSTALL1.DSK / LFS.LSS < prev    next >
Text File  |  1998-02-06  |  158KB  |  3,944 lines

  1. '/*********************************************************************
  2. ''
  3. ''   Module Name:   LFS.lss
  4. ''
  5. ''   Module Code:   COMINST
  6. ''
  7. ''   Author:              
  8. ''
  9. ''   Creation Date:       Jan 26, 1994
  10. ''
  11. ''   Copyright Lotus Development Corporation, (c) 1994
  12. ''
  13. ''
  14. ''  
  15. ''   Description: 
  16. ''  
  17. ''
  18. ''   Additional authors:
  19. ''
  20. ''     build 113 : Bug Fixes -- 1) Version checking has been improved to check for released builds 4.5 or later
  21. ''                              2) No need to have notes on the path, since now we check the registry for the notes .lsx file.
  22. ''                              3)
  23. ''     build 112 (beta candidate for DFS4.5): This version has retained LFS everywhere except inthe places that user might see
  24. ''                                            such as Icon Title, Database Titles, Registry info etc. Fixed several bugs:
  25. ''                                            1. Fixed all the help texts
  26. ''                                            2. Installation on a Domino Server
  27. ''                                            3. Removed 
  28. ''   Change History:
  29. '' 
  30. ''    Rev 1.79   01 Jul 1996 15:40:46   jdonohue
  31. '' Update shared component version numbers to Suite '97, added uninstall 
  32. '' 
  33. ''    Rev 1.78   24 May 1996 15:29:38   jdonohue
  34. '' Added example of using "Fills" as a shared component
  35. '' 
  36. ''    Rev 1.77   17 May 1996 10:36:06   cmoy
  37. '' changes to lfsmoredirscb
  38. '' 
  39. ''    Rev 1.76   14 May 1996 11:38:56   jdonohue
  40. '' Don't call  Lot_RegisterObject when registering shared component
  41. '' 
  42. ''    Rev 1.75   09 May 1996 14:15:14   glutz
  43. '' Added routine for removing previous version to PreCopyConfigLFS.
  44. '' 
  45. ''    Rev 1.74   02 Apr 1996 11:51:54   jdonohue
  46. '' Added example calls to MarkFixupSourceDirSymbol and MarkLanguageSubdir
  47. '' Removed call to SetLanguageSubdir
  48. '' 
  49. ''    Rev 1.73   14 Mar 1996 11:58:38   jdonohue
  50. '' Ref SPR: DWIR339SWR
  51. '' Added ".LNK" to name for uninstall of start menu link in AddIconsLFS
  52. '' 
  53. ''    Rev 1.72   07 Mar 1996 09:57:14   jdonohue
  54. '' Cleanup call to and function Lot_WriteOLERegForLFS
  55. '' 
  56. ''    Rev 1.71   04 Mar 1996 14:43:46   jdonohue
  57. '' Removed references to LOTUSAPP in comments
  58. '' 
  59. ''    Rev 1.70   28 Feb 1996 15:44:28   jdonohue
  60. '' Fixed typo in number calling Reg_SetProdSizes
  61. '' 
  62. ''    Rev 1.69   27 Feb 1996 10:27:36   jdonohue
  63. '' Changed references to SYM_INSTALLKIND$ to SYM_INSTALLKINDS$(prodno%)
  64. '' 
  65. ''    Rev 1.68   22 Feb 1996 13:26:16   mnatsis
  66. '' Checking in for SHU CHEN - Added following functions and callbacks 
  67. '' DetectPreviousVersion, LFSRemoveObsoleteFiles and Lot_WriteOLERegForLFS
  68. '' 
  69. ''    Rev 1.2   14 Feb 1996 10:13:58   vtshing
  70. '' Bld8; Updating
  71. '' 
  72. ''    Rev 1.67   29 Jan 1996 16:28:02   mnatsis
  73. '' Added 2 examples of handling backing up SMARTMASTERS. The code is commented 
  74. '' out. There is no example of how to setup INF files for this however.
  75. '' 
  76. ''    Rev 1.66   29 Jan 1996 11:54:30   mnatsis
  77. '' Added def for FINDWINDA Windows API
  78. '' 
  79. ''    Rev 1.65   29 Jan 1996 11:24:54   mnatsis
  80. '' Added code to check if product is running during install - 2 examples 
  81. '' 
  82. ''    Rev 1.64   04 Jan 1996 13:45:00   jdonohue
  83. '' Ref SPR: RMOO2XBHU5
  84. '' Clients register different min/max sizes for node install versus other installs  
  85. '' Call MarkFixupSourceDirSymbol for server locations (eliminate
  86. '' MarkSourceLanguageSubdir)
  87. '' 
  88. ''    Rev 1.63   22 Dec 1995 16:06:50   jdonohue
  89. '' Ref SPR: TBAT2XDSYX
  90. '' The treatment of language dependent content destination directories has been
  91. '' changed in LFS.LSS as follows:
  92. '' 1)    All symbols must be initialized in InitLFS
  93. '' 2)    Language dependent symbols reset    in PreCopyConfigLFS just prior to copying
  94. '' the files.
  95. '' All references to SYM_PARENTDIR$ have been removed -- use SYM_BASEDIR$
  96. '' Icons use language acronym ("DE") rather than name ("Deutsch")
  97. '' 
  98. ''    Rev 1.62   08 Dec 1995 14:15:36   jdonohue
  99. '' Fix JHAR2W5LRL: Added call to Lot_TrimEndSlash before writing path in registr
  100. '' 
  101. ''    Rev 1.61   07 Nov 1995 10:21:24   tveerapp
  102. '' Moved the LANGDIR setting to Init and took out code from InitCopylist.
  103. '' this should be there in PreCopyConfig.
  104. '' 
  105. ''    Rev 1.60   03 Nov 1995 12:04:46   jdonohue
  106. '' Do not regresh destination for distribution install in PreCopyConfig
  107. '' 
  108. ''    Rev 1.59   Oct 26 1995 16:53:48   cmoy
  109. '' Added call to Lot_RefreshDestination for language subdirectories in PreCopyCo
  110. '' nfig
  111. '' 
  112. ''    Rev 1.58   25 Oct 1995 11:17:28   jdonohue
  113. '' Added setting language symbols to PreCopyConfigLFS
  114. '' 
  115. ''    Rev 1.57   Oct 24 1995 16:57:44   cmoy
  116. '' removed eof char
  117. '' 
  118. ''    Rev 1.56   23 Oct 1995 12:29:40   jdonohue
  119. '' Don't use SYM_REG_PRODUCTNAME$, SYM_REG_PRODUCTVER$ for registry since this i
  120. '' only valid for product #1, which may be suite
  121. '' 
  122. ''    Rev 1.55   13 Oct 1995 16:30:50   jdonohue
  123. '' Changed  "Install Type" to "InstallType"
  124. '' New Function LFS_RegisterSharedComponent to write registry entry and create
  125. '' object for uninstall
  126. '' Streamlined logic for language qualifier on icon
  127. '' 
  128. ''    Rev 1.54   05 Oct 1995 10:48:50   glutz
  129. '' Change references to DBLFS_MOREDIRS to DBLFS_MOREDIRS3.
  130. '' 
  131. ''    Rev 1.53   27 Sep 1995 12:46:54   jdonohue
  132. '' Modified InitLanguageLFS to call InitLanguages function
  133. '' 
  134. ''    Rev 1.52   01 Sep 1995 13:11:38   amontalv
  135. '' Correction to how icons are named.  Had used call to Lot_GetProgFolder, which was
  136. '' only needed when registering the link object.
  137. '' 
  138. ''    Rev 1.51   29 Aug 1995 14:16:52   tveerapp
  139. '' Commented out code to surface default preferences dialog.
  140. '' 
  141. ''    Rev 1.50   28 Aug 1995 16:59:30   tveerapp
  142. '' FIxed the node initcopylist code that turned off sections not installed on
  143. '' the server.
  144. '' 
  145. ''    Rev 1.49   28 Aug 1995 13:41:40   tveerapp
  146. '' No change.
  147. '' 
  148. ''    Rev 1.48   28 Aug 1995 13:40:12   tveerapp
  149. '' Removed the example for registering the Program Group for
  150. '' uninstall. This fixes an spr.
  151. '' 
  152. ''    Rev 1.47   25 Aug 1995 11:27:06   amontalv
  153. '' Made icons in all environments have same name.
  154. '' 
  155. ''    Rev 1.46   24 Aug 1995 10:30:48   jdonohue
  156. '' Added comment about USERDIR
  157. '' 
  158. ''    Rev 1.45   23 Aug 1995 12:26:54   tveerapp
  159. '' Added code to register work, masters and backup directories with the toolkit.
  160. '' 
  161. ''    Rev 1.44   22 Aug 1995 18:24:54   tveerapp
  162. '' Added the callback etc for work, smasters and backup.
  163. '' 
  164. ''    Rev 1.43   22 Aug 1995 15:17:10   jdonohue
  165. '' Do not register the uninstaller for language install
  166. '' 
  167. ''    Rev 1.42   22 Aug 1995 14:03:20   jdonohue
  168. '' Changed GetLFSPathfromLotusIni to check for registry entries
  169. '' Function GetLFSPathfromLotusIni returns path w/o filename now
  170. '' 
  171. ''    Rev 1.41   21 Aug 1995 15:50:54   amontalv
  172. '' Added global for registry entry.
  173. '' 
  174. ''    Rev 1.40   21 Aug 1995 10:23:48   jdonohue
  175. '' Added calls in Init for marking secondary language content directories
  176. '' Moved language directory symbol setting code to InitCopyList
  177. '' 
  178. ''    Rev 1.39   17 Aug 1995 09:34:14   amontalv
  179. '' Had put wrong number of arguments.
  180. '' 
  181. ''    Rev 1.38   16 Aug 1995 20:35:30   amontalv
  182. '' Added some error handling for registry.
  183. '' 
  184. ''    Rev 1.37   15 Aug 1995 11:53:12   jdonohue
  185. '' Removed SYM_INSTALLKIND$ -- in GLOBALS.LSS
  186. '' 
  187. ''    Rev 1.36   09 Aug 1995 09:18:16   jdonohue
  188. '' Don't add language qualifier to icon for first time install
  189. '' 
  190. ''    Rev 1.35   04 Aug 1995 15:53:38   jdonohue
  191. '' Added code to create icons with language switch and sublanguage name appended
  192. '' 
  193. ''    Rev 1.34   02 Aug 1995 16:54:54   jdonohue
  194. '' Changed calling syntax for InitLanguageLFS
  195. '' 
  196. ''    Rev 1.33   31 Jul 1995 16:28:10   pdonahue
  197. '' changed verison number from 2.1 to 0.0. 
  198. '' Changed registry entry for installtype from type REG_SZ to REG_DWORD.
  199. '' 
  200. ''    Rev 1.32   20 Jul 1995 14:20:58   jdonohue
  201. '' Fixed uninstall command line string for language
  202. '' 
  203. ''    Rev 1.31   12 Jul 1995 17:07:18   jdonohue
  204. '' Added comments about language install subdirectories
  205. '' 
  206. ''    Rev 1.30   23 Jun 1995 13:55:56   mzgripce
  207. '' remove autoinst.rsp from the uninstaller registration example
  208. '' 
  209. ''    Rev 1.29   23 Jun 1995 13:24:56   mzgripce
  210. '' added an example for the Program_group class registration
  211. '' 
  212. ''    Rev 1.28   22 Jun 1995 18:38:14   mzgripce
  213. '' register the components that are going with the lfs product:aswan and its 
  214. '' dependency: LotusScript,Bento and Shared help
  215. '' 
  216. ''    Rev 1.27   21 Jun 1995 18:01:26   mzgripce
  217. '' add examples for the other object clases registration for uninstall
  218. '' 
  219. ''    Rev 1.26   21 Jun 1995 12:48:08   jdonohue
  220. '' SYM_INSTALLKIND global symbol, not product specific
  221. '' 
  222. ''    Rev 1.25   21 Jun 1995 09:09:42   jdonohue
  223. '' Moved AddRegistryLanguage to AddRegistryKeysLFS
  224. '' 
  225. ''    Rev 1.24   19 Jun 1995 17:41:56   mzgripce
  226. '' change the lfs version to 2.1 and enable the uninstaller registration 
  227. '' 
  228. ''    Rev 1.23   19 Jun 1995 16:53:24   mzgripce
  229. '' add examples calls to Lot_RegisterObject()
  230. '' 
  231. ''    Rev 1.22   16 Jun 1995 17:08:02   pdonahue
  232. '' added registry entries for lfs.
  233. '' 
  234. ''    Rev 1.21   09 Jun 1995 17:00:58   mzgripce
  235. '' added call example in PostCopyConfig to register the uninstaller
  236. '' 
  237. ''    Rev 1.20   07 Jun 1995 16:32:08   amontalv
  238. '' Changed the Win95 start folder so that it initializes
  239. '' earlier in the program.  This should make automation
  240. '' easier to implement for it.  There are still a couple of
  241. '' bugs that I need to work out, but I feel that I should
  242. '' check what I have now.  I also changed the name of some
  243. '' of the functions to conform more to current names.
  244. '' 
  245. ''    Rev 1.19   01 Jun 1995 14:54:10   amontalv
  246. '' Had the check incorrect for creating links.  It tried to create links
  247. '' when not in Win95 instead of when in Win95.
  248. '' 
  249. ''    Rev 1.18   01 Jun 1995 11:11:52   amontalv
  250. '' Added API function CreateLink to create shortcuts.  Also added functions
  251. '' to save and get the link path to support the CreateLink.  I also changed
  252. '' the startup program folder code to use the default dialog proc and changed
  253. '' the default dialog proc to process directory trees.
  254. '' 
  255. ''    Rev 1.17   30 May 1995 16:01:00   jdonohue
  256. '' Set symbols for product and version for language install
  257. '' 
  258. ''    Rev 1.16   21 May 1995 17:30:24   mzgripce
  259. '' add an example for share32 support 
  260. '' 
  261. ''    Rev 1.15   19 May 1995 15:31:28   mzgripce
  262. '' use the parent dir in the product default destination
  263. '' 
  264. ''    Rev 1.14   19 May 1995 14:42:44   jdonohue
  265. '' Remove redundant symbol for language subdirectory
  266. '' 
  267. ''    Rev 1.13   19 May 1995 13:23:46   jdonohue
  268. '' Added call to Lot_SetLanguageSectionsOn
  269. '' 
  270. ''    Rev 1.12   18 May 1995 15:36:52   jdonohue
  271. '' Added language install code
  272. '' 
  273. ''    Rev 1.11   18 May 1995 10:18:52   jdonohue
  274. '' Added language install function InitLanguage
  275. '' 
  276. ''    Rev 1.9   02 May 1995 12:54:06   cmoy
  277. '' Merged c2 into cf build
  278. '' 
  279. ''    Rev 1.9   10 Apr 1995 18:11:28   amontalv
  280. '' Changed comments to reflect change of function reference.
  281. '' 
  282. ''    Rev 1.8   31 May 1994 13:54:42   mmeth
  283. '' 
  284. '' Added PrevVersionLFS
  285. '' 
  286. ''    Rev 1.7   13 May 1994 14:09:20   thangv
  287. '' 
  288. '' Added the else part to the default code in InitLFS case node.
  289. '' 
  290. ''    Rev 1.6   06 May 1994 09:24:52   mmeth
  291. '' wrong return for function
  292. '' 
  293. ''    Rev 1.5   02 May 1994 19:18:16   mzgripce
  294. '' 
  295. '' add AddIconsLFS
  296. '' 
  297. ''    Rev 1.4   28 Mar 1994 17:25:50   thangv
  298. '' 
  299. '' Resourced strings that were not. SID_LFS_SERVER_DIRNAME, SID_LFS_DIST_DIRNA
  300. '' 
  301. ''    Rev 1.3   22 Mar 1994 09:24:46   mmeth
  302. '' Modified AddTo Billboard List to use IDD_LFSBILLBD1,...
  303. '' 
  304. ''    Rev 1.2   17 Feb 1994 17:44:44   thangv
  305. '' Fixed the trailing \ and LFS_DIR
  306. '' 
  307. ''    Rev 1.1   15 Feb 1994 14:36:20   mmeth
  308. '' moved the EXIT FUNCTION CALL in
  309. '' 
  310. ''    Rev 1.0   11 Feb 1994 10:53:40   jbrodeur
  311. '' Initial Revision
  312. ''----------------------------------------------------------------------
  313. ''   Date     Vers. Pgmr  SPR#  Change
  314. ''----------------------------------------------------------------------
  315. '' !
  316. ''  02-07-94   0000             Initial Product Shipment
  317. ''
  318. ''----------------------------------------------------------------------
  319. ''
  320. ''*********************************************************************/
  321. '**   This file contains detailed comments. PLEASE READ THEM! They provide
  322. '**   information that will make writing Install much easier. In some
  323. '**   cases, you will not find this information in any other sources.
  324. ''*********************************************************************/
  325. '**
  326.  
  327. USE "TOOLKIT"
  328. USE "LANGUAGE"
  329. OPTION DECLARE
  330. Uselsx "*Notes"
  331.  
  332. '%INCLUDE "lsconst.lss"
  333. '%INCLUDE "lsxbeerr.lss"
  334. '%INCLUDE "lsxuierr.lss"
  335.  
  336. '** These Are the Required Functions that Products must provide
  337. '***************************************************************
  338. DECLARE PUBLIC FUNCTION ProductRegLFS (prodno%, network$, direction$) AS STRING
  339. DECLARE PUBLIC FUNCTION DefaultUserRegLFS (prodno%, network$, direction$) AS STRING
  340. DECLARE PUBLIC FUNCTION InitLFS (prodno%, network$, direction$, basedir$) AS STRING
  341. DECLARE PUBLIC FUNCTION PrevVersionsLFS (prodno%, network$, direction$) AS STRING
  342. DECLARE PUBLIC FUNCTION PathChangeLFS (prodno%, network$, direction$, destdirsym$, mainprodsonly%) AS STRING
  343. DECLARE PUBLIC FUNCTION InitCopyListLFS (prodno%, network$, direction$) AS STRING
  344. DECLARE PUBLIC FUNCTION PreCopyConfigLFS (prodno%, network$, direction$, lic%) AS STRING
  345. DECLARE PUBLIC FUNCTION AddTheBillBoardsLFS (prodno%, network$, direction$, nbytes&) AS STRING
  346. DECLARE PUBLIC FUNCTION PostCopyConfigLFS (prodno%, network$, direction$, programgroup$) AS STRING
  347. DECLARE PUBLIC FUNCTION AddIconsLFS (prodno%, network$, direction$, programgroup$) AS STRING
  348. DECLARE PUBLIC FUNCTION UILFS (prodno%, network$, direction$) AS STRING
  349. DECLARE PUBLIC FUNCTION PostSuccessRegLFS (prodno%, network$, direction$) AS STRING
  350. DECLARE PUBLIC SUB AddRegistryKeysLFS (prodno%, network$) 
  351. DECLARE PUBLIC FUNCTION InitLanguageLFS (prodno%, network$, direction$) AS STRING
  352. DECLARE SUB RemoveDevAndService()
  353. DECLARE SUB RenameDir(sourceDir As STRING, destDir As STRING)
  354. DECLARE SUB RemoveLFS11()
  355. DECLARE FUNCTION DetectPreviousVersion (Productfound$) AS STRING
  356. DECLARE SUB LFSRemoveObsoleteFiles (hDlg&, CtrlId%, Classes$, LInst&)
  357. DECLARE SUB CreateDBandCopyDocs(newTemplate As NotesDatabase, currentDB As NotesDatabase,title$,filename$)
  358. DECLARE SUB CreateDBOnServerAndCopyDocs(newTemplate As NotesDatabase, currentDB As NotesDatabase, oldserver$, newserver$, title$, filename$)
  359. DECLARE FUNCTION GetPrivateProfileString Lib "Kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName _
  360.                         As STRING, lpKeyName As Any, _
  361.                         ByVal lpDefault As STRING, ByVal lpReturnedString As STRING,ByVal nSize As Integer, _
  362.                         ByVal lpFileName As STRING) As LONG
  363. DECLARE FUNCTION GetDlgItemText Lib "user32" Alias "GetDlgItemTextA" (ByVal hwnd&,ByVal ctrlId%, ByVal szText _
  364.                         As STRING, ByVal strSize%) AS INTEGER
  365. DECLARE FUNCTION WinExec Lib "Kernel32" Alias "WinExec" (ByVal cmdLine As STRING, ByVal cmdShowFlag%) As INTEGER
  366. DECLARE FUNCTION MoveFile Lib "Kernel32" Alias "MoveFileA" (ByVal SrcFile As STRING, ByVal DestFile As Any) As INTEGER
  367. DECLARE SUB SetAccessLevels(newdb As NotesDatabase, defACL%,anonymACL%)
  368. DECLARE SUB EnableRoles(newdb As NotesDatabase,person AS STRING, acllevel%, role AS STRING)
  369. DECLARE FUNCTION readOldServerNamesFromRegistry ()
  370.  
  371. '********************************************* GetServerList function lives in Cookie.dll *******************
  372. DECLARE PUBLIC FUNCTION LFSGetServerList LIB "COOKIE.DLL" ALIAS "#5" (ByVal pszPortName As STRING,_
  373.                         pwNumEntries As INTEGER,ByVal pszServerNames As STRING, ByVal wBufLen As INTEGER) As Integer
  374.  
  375. '** Product specific functions
  376. '*****************************
  377. DECLARE FUNCTION GetLFSPathfromLotusIni() AS STRING
  378. DECLARE SUB LFS_RegisterSharedComponent(Key$, FileName$, Version$)
  379. DECLARE FUNCTION Lot_WriteOLERegForLFS(network$, prodno%) AS INTEGER
  380. DECLARE FUNCTION FindWindowA LIB "user32" (ByVal lpClassName As Any, ByVal lpCaption As Any) AS LONG
  381. '*************************************************************************
  382. '**************************** Required Functions *************************
  383. '*************************************************************************
  384. DECLARE SUB LFSNOTESDBCB(hDlg&, CtrlId%, Classes$, LInst&)
  385.  
  386. CONST Debug = 0
  387. CONST doUpgrade = 1, doOverwrite = 2, doBring = 1
  388. '**//{{PYL_ADDED(GLOBAL)
  389. DIM mailserver As STRING
  390. DIM mailfile As STRING
  391. DIM tempMailFile As STRING
  392. DIM maildomain As STRING
  393. DIM admindbname AS STRING
  394. DIM formsdbname AS STRING
  395. DIM logdbname AS STRING
  396. DIM coverdbname AS STRING
  397. DIM faxdbname AS STRING
  398. DIM transdbname AS STRING
  399. DIM oldadminserver$,oldformsserver$, oldlogserver$,oldtransserver$
  400. DIM adminserver AS STRING
  401. DIM formsserver AS STRING
  402. DIM logserver As STRING
  403. DIM transserver As STRING
  404. DIM coverserver As STRING
  405. DIM faxqserver As STRING
  406. DIM webfaxdbname As STRING
  407. DIM dominoserver As STRING
  408. DIM DoDomino%
  409. DIM recursiveCount%
  410. DIM DBUpgradeOverwriteCancel%        'This is flag to indicate whether to upgrade (=1), Overwrite (=2) or Leave untouched (=3)
  411.                                     'a Notes Database which already exists on the user's system.
  412. DIM NameOfDBtoUpgrade AS STRING
  413. DIM ServerOfDBtoUpgrade AS STRING
  414. DIM newServerName AS STRING
  415. DIM InstLogFile%
  416.  
  417. CONST adminTitle$ = "DFS Administration Database"
  418. CONST phoneTitle$ = "DFS Phone Translation Database"
  419.  
  420.  
  421. '**//}}PYL_ADDED
  422.  
  423. '*************************************************************************
  424. '** SUB Initialize
  425. '**
  426. '** Purpose: The only purpose of this routine is to register your product.
  427. '**          This routine assigns your acronym to your product.
  428. '**          Without this function, your product will not install.
  429. '**          All you need to do in this subroutine is:
  430. '**                   modify LFS -> your acronym.
  431. '**
  432. '**          ASSUMPTIONS: Many things in the toolkit key off of your
  433. '**                       acronym. These are the constraints:
  434. '**                       1. Your top level chapter in the INF must
  435. '**                          have a KEYWORD of your acronym +"TOP"
  436. '**                          e.g. acronymTOP
  437. '** Author:  Marcel Meth  
  438. '** Arguments: None
  439. '** Returns:   NONE
  440. '*************************************************************************
  441. SUB Initialize
  442.    Reg_RegisterProductNames "LFS", LdString(SID_LFS_COMMERCIALNAME) 
  443. END SUB
  444.  
  445. '*************************************************************************
  446. '** FUNCTION ProductRegLFS (prodno%, network$, direction$) AS INTEGER
  447. '**
  448. '** Purpose: This function allows your product to register itself
  449. '**          in the Install Product Registry.  The toolkit stores
  450. '**          the information provided and will provide you with
  451. '**          various features accordingly.  For example, if you support
  452. '**          shared files, the toolkit will do most of the work
  453. '**          for the COMPNENT directory.
  454. '**
  455. '**          For the most part you should use only Reg_Set... Functions.
  456. '**          
  457. '**
  458. '**          If you turn on ATM, LICENSING, or SHARED tools, then
  459. '**          you must be sure to add the appropriate lines and files
  460. '**          in your acronym.SCR and acronym.LYT, respectively. 
  461. '**          See Cookbook.
  462. '**
  463. '**          If you support server install, (because you need the files
  464. '**          for Licenser), you will have to make sure that you have 
  465. '**          the correct **entire** contents of install.lyt and install.scr 
  466. '**          for the install files in your acronym.SCR and acronym.LYT
  467. '**          
  468. '**
  469. '** Arguments:  All parameters are **read only**. 
  470. '**          prodno%: This is your prodno%.  It is assigned to you by the
  471. '**                   toolkit in the order in which you were registered.
  472. '**                   When your product is part of SmartSuite, SmartSuite
  473. '**                   will always be product #1. (prodno% >=1)
  474. '**          network$: UNINITIALIZED
  475. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  476. '**                      then step backwards, i.e start at your last dialog
  477. '**                      first.
  478. '**     
  479. '** Errors:    No return code for errors, you must Raise them
  480. '** Author:    MMeth
  481. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  482. '**                             allow the user to step backwards.)
  483. '*************************************************************************
  484.  
  485. PUBLIC FUNCTION ProductRegLFS (prodno%, network$, direction$) AS STRING
  486.    ProductRegLFS = gNEXT
  487.  
  488.    '** FOR a complete set of things to register
  489.    '** see API doc under Reg_Set...
  490.  
  491.    '**Reg_SetSupportedInstallTypes prodno%, 1, 1, 1
  492.    Reg_SetSupportedInstallTypes prodno%, 1, 0, 0
  493.    If network$ = gNODE$ Then
  494.         Reg_SetProdSizes prodno%, 20 * 1024, 20 * 1024
  495.    Else
  496.         Reg_SetProdSizes prodno%, 4 * 1048576, 2 * 1048576
  497.    End If
  498.  
  499.    '** If you need Lotusapp or datalens support turn this on.
  500.    Reg_SetShareFlags prodno%, 1, 1, 1, 1 
  501.  
  502.    '** If you need Components directory turn this on.
  503.    Reg_SetShare32Flag prodno%, 0
  504.  
  505.    '** Coming to an install program near you soon
  506.    'Reg_SetCDOption prodno%,Inst%,CDOptStr$ 
  507.    'Reg_SetCDOptionSelected ProdNo%,Inst%,Selection% 
  508.  
  509.    '** Any options that you want your sys-admin and node user to see
  510.    '** must be entered here.  They must correspond with keywrods in the
  511.    '** inf file. This functionality will be avilable March 4, but you
  512.    '** can set these fields now!
  513.    'Reg_SetNodeOption ProdNo%,Inst%,NodeOptStr$  
  514.    'Reg_SetNodeOptionSelected ProdNo%,Inst%,Selection% 
  515.  
  516.    '** Toolkit default is for no server supprt, turn on if desired.
  517.    Reg_SetSrvSupport prodno%, 1
  518.  
  519.    '** Toolkit default is for no server supprt, turn on if desired.
  520.    '** license support only available for server install.
  521.    Reg_SetLicenseSupport prodno%, 0
  522.  
  523.    '** Toolkit default is no ATM support
  524.    'Reg_SetATMSupport prodno%, 0
  525.  
  526.    '** This is the default value the user will see.
  527.    Reg_SetProgManagerGroup prodno%, LdString(SID_LOTUS_APPLICATIONS)
  528.  
  529.    '** Required if you have a work, smartmasters and backup directories
  530.    '** register support with the toolkit to surface the dialog
  531.    Reg_SetMoreDirsData prodno%, "LFSMOREDIRSCB", DBLFS_MOREDIRS3, _
  532.      DBLFS_MOREDIRS3    
  533.  
  534.  
  535. END FUNCTION
  536.  
  537. '*************************************************************************
  538. '** FUNCTION DefaultUserRegLFS (prodno%, network$, direction$) AS STRING
  539. '**
  540. '** Purpose: **Only** the first registered product gets called.
  541. '**          For SmartSuite, this will be SmartSuite.
  542. '**          This function allows you to set the default user registration
  543. '**          information that the user will be shown. The toolkit
  544. '**          will provide default values from MS-Windows. If you disagree
  545. '**          with them you should modify them in this function using:
  546. '**          SetSymbolValue on SYM_NAME, SYM_COMPANY & SYM_SERIALNUM$
  547. '**          
  548. '**          It is up to you how you store registration information.
  549. '**          It will not be stored until later in PostCopyConfigLFS.
  550. '**          The CIT provides functions that allow you to access .ri 
  551. '**          files: Lot_ReadDefaultsfromRi(ripath$).
  552. '**
  553. '**          If you need to write back to the floppy, do it here.
  554. '**          Most Lotus products will no longer write back to the floppy.
  555. '**          Remeber, you can't write back to a CD or network!
  556. '**
  557. '** In Symbols : SYM_NAME$, SYM_COMPANY$
  558. '** Out Symbols: SYM_NAME$, SYM_COMPANY$, SYM_SERIALNUM$
  559. '**            
  560. '** Arguments:  All parameters are **read only**. 
  561. '**          prodno%: This is your prodno%.  It is assigned to you by the
  562. '**                   toolkit in the order in which you were registered.
  563. '**                   When your product is part of SmartSuite, SmartSuite
  564. '**                   will always be product #1. (prodno% >=1)
  565. '**          network$: UNINITIALIZED
  566. '**          network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  567. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  568. '**                      then step backwards
  569. '**     
  570. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  571. '**                      then step backwards, i.e start at your last dialog
  572. '**                      first.
  573. '**     
  574. '** Errors:    No return code for errors, you must Raise them
  575. '** Author:    MMeth
  576. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  577. '**                             allow the user to step backwards.)
  578. '*************************************************************************
  579.  
  580. PUBLIC FUNCTION DefaultUserRegLFS (prodno%, network$, direction$) AS STRING
  581.    DIM ripath$, defdir$, temp%, rc%
  582.  
  583.    DefaultUserRegLFS = gNEXT
  584.  
  585.    If network$ = gNODE$ Then
  586.       ripath$ = GetSymbolValue(SYM_STF_SRCDIR$) + "LFS.ri"
  587.    ElseIf network$ = gSTANDARD$ Then
  588.       '** GetLFS.... is in this file and illustrates how to
  589.       '** retrieve you prod. from lotus.ini
  590.       defdir$ = GetLFSPathfromLotusIni()
  591.       if defdir$ = "" goto rinotfound
  592.       ripath$ = defdir$ + "LFS.ri"
  593.    End If
  594.  
  595.    '' RETURNS TRUE IF SUCCESSFULLY FOUND RI FILE AND READ INFORMATION
  596.    '' This functions populates: SYM_NAME$, SYM_COMPANY$, SYM_SERIALNUM$
  597.    rc% = Lot_ReadDefaultsfromRi(ripath$) 
  598.  
  599. rinotfound:
  600.  
  601. END FUNCTION
  602.  
  603.  
  604. '*************************************************************************
  605. '** FUNCTION InitLFS (prodno%, network$, direction$, basedir$) AS STRING
  606. '**
  607. '** Purpose: This function will be called after the Welcome dialog has been
  608. '**          filled in by the user. This is the first time you will be 
  609. '**          called when the server parameter is valid.  
  610. '**          You need to use this function to intialize certain things. 
  611. '**          (See the MUST DO below).
  612. '**          
  613. '**          This is a good place to put up a LotusScript messagebox warning the user
  614. '**          of a previous version of your product. If there is a previous
  615. '**          version you might want to steer them towards overwriting it,
  616. '**          deleting the old version, or allowing both versions to exist.
  617. '**          
  618. '**
  619. '** Must Do: You **MUST** set inital values for all of the destination
  620. '** =======  directories that you refer to in your INF file.  If you do not,
  621. '**          then InitCopylist will fail!  e.g. SetSymbolValue "LFSDIR", basedir$
  622. '**          Of course you may be more intelligent.  You should preface your
  623. '**          directory with basedir$.  The toolkit is finding a good drive
  624. '**          letter and basedirectory.  Also, remeber all paths end in a
  625. '**          \ and are lower case.
  626. '**
  627. '**          You should **NOT** define LOTUSFONTSDIR, WINDIR, 
  628. '**          USERDIR & WINSYSDIR. The toolkit does this for you.
  629. '**
  630. '**          Once you have defined destdir symbols, you need to register
  631. '**          them with the toolkit. (See the code below)
  632. '**
  633. '** In Symbols : 
  634. '** Out Symbols: 
  635. '**            
  636. '** Arguments:  All parameters are **read only**. 
  637. '**          prodno%: This is your prodno%.  It is assigned to you by the
  638. '**                   toolkit in the order in which you were registered.
  639. '**                   When your product is part of SmartSuite, SmartSuite
  640. '**                   will always be product #1. (prodno% >=1)
  641. '**          network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  642. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  643. '**                      then step backwards
  644. '**     
  645. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  646. '**                      then step backwards, i.e start at your last dialog
  647. '**                      first.
  648. '**
  649. '**          basedir$:   The toolkit has found a good base. for your directory.
  650. '**                      This is it.  You should use it.  This will make Smart
  651. '**                      Suite work, and will pick a good drive letter for you.
  652. '**     
  653. '** Errors:    No return code for errors, you must Raise them
  654. '** Author:    MMeth
  655. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  656. '**                             allow the user to step backwards.)
  657. '**
  658. '*************************************************************************
  659.  
  660. PUBLIC FUNCTION InitLFS (prodno%, network$, direction$, basedir$) AS STRING
  661. DIM sym$, symname$, defdir$, position%, proddir$, iniPath$, rv%, LFSversion$, notused%
  662. DIM Productfound$,previousprod$,temp%
  663. DIM NotesDataDir$    '**//{{PYL_ADDED(NOTESDATADIR) //}}PYL_ADDED
  664. DIM sourceFile As STRING
  665. DIM destFile As STRING
  666. DIM majorVer#,minorVer#
  667. DIM filename$
  668.  
  669. ' Check and make sure that we have Notes 4.x on the system
  670.     DIM session As New NotesSession
  671.     DIM versionStr As STRING
  672.     DIM startPos%
  673.     versionStr$ = session.NotesVersion
  674.     startPos% = InStr(1,versionStr$,"4.")
  675.     If (startPos%) Then
  676.         majorVer# = Val(Mid$(versionStr$,startPos%,3))
  677.     End If
  678. '        minorVer# = Val(Mid$(versionStr$,3,1))
  679. '    MessageBox "majorVersion is "+str$(majorVer#)
  680.  
  681.     'MessageBox "This is PreGold Version. Fix the version checking for Gold"
  682.  
  683. '    MessageBox "MajorVer "+str$(majorVer#)+" Minor Ver "+str$(minorVer#)
  684. '    If (majorVer# < 4.5) Then        ' this is not a 4.5 release or later of Notes
  685. '        MessageBox "Version of Notes on your machine has to be 4.5 or later, and currently you have "+versionStr$+"installed. Please upgrade and start the Install again"
  686. '        ERROR STFQUIT
  687. '    End If
  688.     '**//{{PYL_ADDED(BEFOREYOUBEGIN)
  689.  
  690.     'Open a log file for writing debug messages
  691.     'InstLogFile% = FreeFile()
  692.     'MessageBox InstLogFile%
  693.     'filename$ =    curdrive()+"DFS45Install.log"
  694.     'Open filename For OutPut As InstLogFile%
  695.  
  696.     SetListItem "IDC_BMP", 1, STR$(IDB_EXCLAIM)
  697.     direction$ = PopupModalDlg (DB_BEFORE_YOU_BEGIN, DB_BEFORE_YOU_BEGIN)
  698.     If direction$ = gBACK Then
  699.         QUIT
  700.     End If
  701.     '**//}}PYL_ADDED
  702.  
  703.     '**//{{PKK_ADDED
  704.     ''notused% = RegisterCallback("LFS", "LFSDODOMINOCB")
  705.     ''direction$ = PopUpModalDlg (DBLFS_DO_DOMINO, DBLFS_DO_DOMINO)
  706.     dominoserver$ = ""
  707.     DoDomino = -1
  708.     '**//}} PKK_ADDED
  709.  
  710.    InitLFS = direction$
  711.    '' In the backwards case, keep backing up
  712.    If direction$ = gBACK Then
  713.       EXIT FUNCTION
  714.    End If
  715.  
  716.    
  717.  
  718.    '' Setup Default directory settings and the associated
  719.    '' text that the user will see
  720.  
  721.    sym$ = Reg_GetDirSymbolList(prodno%)
  722.    symname$ = sym$ + gNAME
  723.  
  724.    ''These two line register it with the toolkit.
  725.    SetListItem sym$, 1, "LFSDIR"
  726.    SetListItem symname$, 1, "LFSDIRNAME"
  727.  
  728.    ''the names aren't used, but register anyway 
  729.    SetListItem sym$, 2, "LFSWORKDIR"
  730.    SetListItem symname$, 2, "LFSWORKDIRNAME"
  731.  
  732.    SetListItem sym$, 3, "LFSMASTERSDIR"
  733.    SetListItem symname$, 3, "LFSMASTERSDIRNAME"
  734.  
  735.    SetListItem sym$, 4, "LFSBACKUPDIR"
  736.    SetListItem symname$, 4, "LFSBACKUPDIRNAME"
  737.  
  738.    '** NOTE The path in the string table is lower case and ends with a slash
  739.      SetSymbolValue "LFSDIR", basedir$ + LdString(SID_LFS_DIR)
  740.      SetSymbolValue "LFSWORKDIR", basedir$ + LdString(SID_LFSWORK_DIR)
  741.      SetSymbolValue "LFSMASTERSDIR", basedir$ + LdString(SID_LFSMASTERS_DIR)
  742.  
  743.      SetSymbolValue "LFSBACKUPDIR", basedir$ + LdString(SID_LFSBACKUP_DIR)
  744.      SetSymbolValue "LFSLANGDIR", GetSymbolValue("LFSDIR")
  745.  
  746.    '** This will be the name of the directory that shows up in captions in 
  747.    '** toolkit dialogs (Static text)
  748.    SetSymbolValue "LFSDIRNAME", LdString(SID_LFS_DIRNAME)
  749.  
  750.     '**//{{PYL_ADDED(NOTESDATADIR)
  751.     NotesDataDir$ = Lot_GetLotusNotesDataPath()
  752.     SetSymbolValue "NOTESDATADIR", LCASE$(NotesDataDir$)
  753.     '**//}}PYL_ADDED
  754.  
  755.    '** Put up a dlg box, if previous version of product found
  756.    '==========================================================
  757.    If network$ = gSTANDARD$ Then
  758.       previousprod$ = DetectPreviousVersion(Productfound$)
  759.  
  760.      If Productfound$ = "True" Then
  761.         Reg_SetObsFiles prodno%,1
  762.      
  763.     else 
  764.      If previousprod$ = "YES" Then
  765.         if GetSymbolValue(SYM_SINGLESMARTSUITE$) = gSMARTSUITE$ then
  766.            Reg_SetPreviousVersion prodno%,"1"
  767.         else
  768. '          direction$ = PopupModalDlg (DBLFS_EXISTING, DBLFS_EXISTING)
  769.           direction$ = gNext$
  770.           If direction$ = gBACK Then
  771.              InitLFS= direction$
  772.              EXIT FUNCTION
  773.           End If
  774.         End if
  775.     end if
  776.      End if 
  777.    End if 
  778.  
  779.  
  780.    '** Put up dialog box, if a version of app is currently running
  781.    '==========================================================
  782.    '** Use the window address of the Window name - Caption
  783.    '** You can alternatly use the address of the class name...MAN
  784.    DIM szWindowName$, nFind&
  785.  
  786.      szWindowName$ = LdString(SID_LFS_RUNNING)
  787.      nFind& = FindWindowA (szWindowName$, 0&)
  788.      while direction$ = gNEXT$ AND nFind& <> 0 
  789.           direction$ = PopupModalDlg (DBLFS_RUNNING, DBLFS_RUNNING)
  790.       if direction$ = gBACK$ then
  791.           InitLFS = direction$
  792.           EXIT FUNCTION
  793.       end if
  794.           nFind& = FindWindowA (szWindowName$, 0&)
  795.      wend                                                 
  796.  
  797.         '** Here's an example using the address of the class name
  798.     '** This may be better since Captions can change.
  799.         '** Put up dialog box if a version is currently running
  800.     '** Use the windows Class of the Application...MN
  801.         'DIM szClassName$, nFind%
  802.  
  803.         'szClassName$ = "LFSAPP_CLASS"
  804.         'nFind& = FindWindowA (szClassName$, 0&)
  805.        'while direction$ = gNEXT$ AND nFind& <> 0 
  806.            'direction$ = PopupModalDlg (DBLFS_RUNNING, DBLFS_RUNNING)
  807.            'if direction$ = gBACK$ then
  808.                'InitLFS = direction$
  809.                'EXIT FUNCTION
  810.             'end if
  811.             'nFind& = FindWindowA (szClassName$, 0&)
  812.         'wend                                                 
  813.  
  814.    '' Special Cases for setting  these symbols
  815.    '' Strings should be resourced, but we didn't want to clutter
  816.    '' the LFS string table.
  817.    SELECT CASE network$
  818.  
  819.    CASE gSERVER$
  820.       SetSymbolValue "LFSNAME", LdString(SID_LFS_SERVER_DIRNAME) 
  821.  
  822.    CASE gDISTRIBUTION$
  823.       SetSymbolValue "LFSNAME", LdString(SID_LFS_DIST_DIRNAME)
  824.  
  825.    CASE gSTANDARD$
  826.           '' check if there is an existing product
  827.       iniPath$ = GetWindowsDir() + "lotus.ini"
  828.  
  829.       if DoesFileExist(inipath$,femExists) then
  830.          defdir$ = GetIniKeyString( iniPath$,"Lotus Applications", "LFS")
  831.          
  832.          if defdir$ <> "" then
  833.  
  834.             temp% = INSTR(1,LCASE$(defdir$),"release")
  835.  
  836.             if temp% <> 0 then
  837.                LFSversion$ = MID$(defdir$,(temp%+8),3)
  838.  
  839.             end if          
  840.  
  841.             IF (LFSversion$ = "2.1") and ( previousprod$ = "YES" ) THEN
  842.  
  843.                temp% = INSTR(1,LCASE$(defdir$),"LFS.exe")
  844.                proddir$ = MID$(defdir$,1,(temp%-1))
  845.                 rv% = Lot_CleanPath(proddir$)
  846.             Else
  847.                  IF GetSymbolValue(SYM_SINGLESMARTSUITE$) = gSMARTSUITE$ THEN
  848.                   proddir$ = basedir$ + LdString(SID_LFS_DIR)
  849.                ELSE
  850.                   proddir$ = GetSymbolValue(SYM_BASEDIR$) + LdString(SID_LFS_DIR)
  851.                END IF
  852.             END IF
  853.  
  854.          else
  855.  
  856.             IF GetSymbolValue(SYM_SINGLESMARTSUITE$) = gSMARTSUITE$ THEN
  857.                proddir$ = basedir$ + LdString(SID_LFS_DIR)
  858.             ELSE
  859.                proddir$ = GetSymbolValue(SYM_BASEDIR$) + LdString(SID_LFS_DIR)
  860.             END IF
  861.          
  862.          end if 
  863.  
  864.       else
  865.  
  866.          IF GetSymbolValue(SYM_SINGLESMARTSUITE$) = gSMARTSUITE$ THEN
  867.             proddir$ = basedir$ + LdString(SID_LFS_DIR)
  868.          ELSE
  869.             proddir$ = GetSymbolValue(SYM_BASEDIR$) + LdString(SID_LFS_DIR)
  870.          END IF
  871.          
  872.       end if 
  873.  
  874.       SetSymbolValue "LFSDIR", proddir$
  875.  
  876.    CASE gNODE$
  877.       iniPath$ = GetWindowsDir() + "lfs.ini"
  878.       IF DoesFileExist(iniPath$, femExists) THEN
  879.          proddir$ = GetIniKeyString(iniPath$,"DIRECTORIES","personal")
  880.          rv% = Lot_CleanPath(proddir$)
  881.          IF proddir$ = "" THEN
  882.             proddir$ = basedir$ + LdString(SID_LFS_DIR)
  883.          END IF
  884.       ELSE
  885.          proddir$ = basedir$ + LdString(SID_LFS_DIR)
  886.          
  887.       END IF
  888.  
  889.       SetSymbolValue "LFSDIR", proddir$
  890.  
  891.    END SELECT
  892.  
  893.     '' Mark directory symbols that need source file adjustment 
  894.     '' Bare filename in .inf file, symbol will be set to the installed location
  895.     '' on the server obtained by reading the server cinstall.ini file
  896.     '' This is needed for files that are located in a sibling directory to the
  897.     '' product directory, e.g., SmartMasters, which would be installed:
  898.     '' \Lotus\
  899.     '' \Lotus\smasters
  900.     '' \Lotus\LFS
  901.         MarkFixupSourceDirSymbol("LFSMASTERSDIR")
  902.  
  903.     '' Mark directory symbols that are language dependent.  CIT will add the 
  904.     '' appropriate language subdirectory to the files in the copy list for 
  905.     '' destinations for a language install, and source if a server install of a
  906.     '' secondary language on the SERVER
  907.         MarkLanguageSubdir("LFSLANGDIR")
  908.         MarkLanguageSubdir("LFSMASTERSDIR")
  909.  
  910. END FUNCTION
  911.  
  912. '*************************************************************************
  913. '** FUNCTION PrevVersionsLFS (prodno%, network$, direction$) AS STRING
  914. '**
  915. '** Purpose: This function is called only for SmartSUite.  It is called
  916. '**          immediately after all the other product functions for
  917. '**          InitLFS are called.  It allows SmartSuite to assess whether
  918. '**          there are older versions of products around.
  919. '**          
  920. '** In Symbols : 
  921. '** Out Symbols: 
  922. '**            
  923. '** Arguments:  All parameters are **read only**. 
  924. '**          prodno%: This is your prodno%.  It is assigned to you by the
  925. '**                   toolkit in the order in which you were registered.
  926. '**                   When your product is part of SmartSuite, SmartSuite
  927. '**                   will always be product #1. (prodno% >=1)
  928. '**          network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  929. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  930. '**                      then step backwards
  931. '**     
  932. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  933. '**                      then step backwards, i.e start at your last dialog
  934. '**                      first.
  935. '**
  936. '** Errors:    No return code for errors, you must Raise them
  937. '** Author:    MMeth
  938. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  939. '**                             allow the user to step backwards.)
  940. '**
  941. '*************************************************************************
  942.  
  943. PUBLIC FUNCTION PrevVersionsLFS (prodno%, network$, direction$) AS STRING
  944. DIM nProducts%, prodIndex%, i%
  945.  
  946.       nProducts% = Reg_GetNumberOfProducts()
  947.       FOR prodIndex% = 1 to nProducts%
  948.           If Reg_GetPreviousVersion(prodIndex%) <> "" Then
  949.              i% = DoMsgBox("Older Versions Found","", MB_OK)
  950.              GOTO PREVPRODFOUND
  951.           End If
  952.       NEXT
  953.  
  954. PREVPRODFOUND:
  955.  
  956. END FUNCTION
  957.  
  958.  
  959. '*************************************************************************
  960. '** FUNCTION PathChangeLFS (prodno%, network$, direction$, destdirsym$, mainprodsonly%) AS STRING
  961. '**
  962. '** Purpose: This function is called whenever the user proposes changes
  963. '**          to a path for your product.  By the time this function calls
  964. '**          you, the paths have already been checked syntactically, and
  965. '**          the directory has been checked to see that it is writeable.
  966. '**          Your obligation is to verify that the proposed new path is ok
  967. '**          with you.  If not, put up a Lotus Script :"MESSAGEBOX" 
  968. '**          telling the user and return gBACK.
  969. '**          
  970. '** In Symbols : 
  971. '** Out Symbols: 
  972. '**            
  973. '** Arguments:  All parameters are **read only**. 
  974. '**          prodno%: This is your prodno%.  It is assigned to you by the
  975. '**                   toolkit in the order in which you were  registered.
  976. '**                   When your product is part of SmartSuite, SmartSuite
  977. '**                   will always be product #1. (prodno% >=1)
  978. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  979. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  980. '**                      then step backwards
  981. '**      destdirsym$: The destdir symbol that has changed. e.g. "LFSDIR"
  982. '**   mainprodsonly%: (TRUE | FALSE) , when TRUE this means that only
  983. '**                   your top level product directory should change,
  984. '**                   probably "LFSDIR". When it is false, it means that
  985. '**                   all related directories should change. It is **YOUR
  986. '**                   RESPONSIBILITY**  to implement this functionality.
  987. '**     
  988. '** Errors:    No return code for errors, you must Raise them
  989. '** Author:    MMeth
  990. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  991. '**                             allow the user to step backwards.)
  992. '**
  993. '*************************************************************************
  994.  
  995. PUBLIC FUNCTION PathChangeLFS (prodno%, network$, direction$, destdirsym$, mainprodsonly%) AS STRING
  996. DIM path$
  997.  
  998.    PathChangeLFS = gNEXT
  999.  
  1000.    path$ = GetSymbolValue (destdirsym$)
  1001.    '' The following is a psudocode example
  1002.    ''''''rc$ = DetectVersionPriorToDarwin(path$)
  1003.    ''''''If rc$ = "BEAGLE" then
  1004.    ''''''   ShowPathError SID_BEAGLE_FOUND, SID_ERR_EXISTBEAGLE, path$
  1005.    ''''''   PathChangeLFS = gBACK
  1006.    ''''''end if   
  1007.  
  1008. END FUNCTION
  1009.  
  1010.  
  1011.  
  1012.  
  1013. '*************************************************************************
  1014. '** FUNCTION InitCopyListLFS (prodno%, network$, direction$) AS STRING
  1015. '**
  1016. '** Purpose:  Product must Initialize the copylist
  1017. '**          
  1018. '** Must Do: You must initialize the copy list.  However,
  1019. '** =======  if you leave the code as is (don't touch it at all),
  1020. '**          it will probably work for you. Copy list must be initialized.
  1021. '**          CAUTION: Make sure that your toplevel section in the
  1022. '**                   acronym.SCR has a keyword of "acronymTOP"
  1023. '**
  1024. '** In Symbols : 
  1025. '** Out Symbols: 
  1026. '**            
  1027. '** Arguments:  All parameters are **read only**. 
  1028. '**          prodno%: This is your prodno%.  It is assigned to you by the
  1029. '**                   toolkit in the order in which you were registered.
  1030. '**                   When your product is part of SmartSuite, SmartSuite
  1031. '**                   will always be product #1. (prodno% >=1)
  1032. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1033. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1034. '**                      then step backwards
  1035. '**     
  1036. '** Errors:    No return code for errors, you must Raise them
  1037. '** Author:    MMeth
  1038. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  1039. '**                             allow the user to step backwards.)
  1040. '**
  1041. '*************************************************************************
  1042.  
  1043. PUBLIC FUNCTION InitCopyListLFS (prodno%, network$, direction$) AS STRING
  1044. DIM i%, sym$, chpt$, nextprod$, notused%, FeatureToFind$
  1045.  
  1046. ON Error STFQUIT GOTO COPYLISTERROR
  1047.  
  1048.  
  1049.    InitCopyListLFS = direction$
  1050.    '' In the backwards case, keep backing up
  1051.    If direction$ = gBACK Then
  1052.       EXIT FUNCTION
  1053.    End If
  1054.  
  1055.  
  1056.    sym$ = Reg_GetProductAcronym(prodno%) + gTOP$
  1057.    chpt$ = Lot_GetChapterFromKeyWord(sym$)
  1058.    If chpt$ = "" Then
  1059.       ERROR STFQUIT
  1060.    End IF
  1061.  
  1062.    SELECT CASE Reg_GetProdSelectedInstallType(prodno%)
  1063.  
  1064.    CASE gCOMPLETE$
  1065.       i% = F_COMPLETE
  1066.    CASE gLAPTOP$
  1067.       i% = F_LAPTOP
  1068.    CASE gCUSTOM$
  1069.       i% = F_CUSTOM
  1070.    END SELECT
  1071.  
  1072.    Lot_InitializeCopyList chpt$, i%
  1073.  
  1074.    '** Make sure to turn off all sections not available on the server.
  1075.    If network$ = gNODE Then
  1076.        nextprod$ = Lot_GetNextSibling(chpt$, F_NOTHING)  
  1077.        chpt$ = Lot_GetFirst(chpt$, F_KEYWORD)  
  1078.       WHILE (chpt$ <> "" AND chpt$ <> nextprod$)
  1079.          FeatureToFind$ = Lot_GetChapterValStr(chpt$, F_KEYWORD)
  1080.          If Lot_IsTheFeatureInstalled(FeatureToFind$) = FALSE Then
  1081.             notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 0)
  1082.          End If
  1083.  
  1084.          chpt$ = Lot_GetNext() 
  1085.       WEND
  1086.    End If
  1087.  
  1088.    EXIT FUNCTION
  1089.  
  1090. COPYLISTERROR:
  1091.    ErrorMsg 0, "Developers: You need to have licenser section with LFSTOP in INF file"
  1092.    ERROR STFQUIT
  1093.  
  1094. END FUNCTION
  1095.  
  1096.  
  1097. '*************************************************************************
  1098. '** FUNCTION UILFS (prodno%, network$, direction$) AS STRING
  1099. '**
  1100. '** Purpose: This is your chance to put up any User Interface
  1101. '**          that you want.  Remember, try to keep it short.
  1102. '**          In SmartSuite, if every product puts up two extra
  1103. '**          dialogs, then the SmartSuite will consist of 16 dialogs!
  1104. '**          
  1105. '**          Pay attention to the value of direction, if you are putting
  1106. '**          up more than one dialog.
  1107. '**
  1108. '**          The toolkit will do an accurate space computation later,
  1109. '**          so you can tamper with the copy list. But you shouldn't
  1110. '**          write out anything to the disk until PostCopyCofig!
  1111. '**   
  1112. '** In Symbols : 
  1113. '** Out Symbols: 
  1114. '**            
  1115. '** Arguments:  All parameters are **read only**. 
  1116. '**          prodno%: This is your prodno%.  It is assigned to you by the
  1117. '**                   toolkit in the order in which you were registered.
  1118. '**                   When your product is oart of SmartSuite, SmartSuite
  1119. '**                   will always be product #1. (prodno% >=1)
  1120. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1121. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1122. '**                      then step backwards
  1123. '**     
  1124. '** Errors:    No return code for errors, you must Raise them
  1125. '** Author:    MMeth
  1126. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  1127. '**                             allow the user to step backwards.)
  1128. '**
  1129. '*************************************************************************
  1130.  
  1131. PUBLIC FUNCTION UILFS (prodno%, network$, direction$) AS STRING
  1132.  
  1133. DIM notused%, chpt$
  1134.  
  1135.     '*** If custom and not Suite  then surface the more dirs dlg
  1136.     '*** 
  1137.     ''''IF Reg_GetProdSelectedInstallType(prodno%) = gCUSTOM$ AND _
  1138.     ''''   GetSymbolValue(SYM_SINGLESMARTSUITE$) <> gSMARTSUITE$ Then         
  1139.     ''''    notused% = RegisterCallback("LFS","LFSMOREDIRSCB") 
  1140.     ''''    direction$ = PopupModalDlg (DBLFS_MOREDIRS, DBLFS_MOREDIRS)
  1141.     ''''END IF
  1142.  
  1143.    UILFS = direction$
  1144.    '' In the backwards case, keep backing up
  1145.    If direction$ = gBACK Then
  1146.       EXIT FUNCTION
  1147.    End If
  1148.    
  1149.   '*** Remove Obsolete Files dlg for  LFS
  1150.    if Reg_GetObsFiles (prodno%) = 1 AND GetSymbolValue (SYM_SINGLESMARTSUITE$) <> gSMARTSUITE$ AND _
  1151.       network$ = gSTANDARD$ _
  1152.    then
  1153. '      notused% = RegisterCallback("LFS", "LFSRemoveObsoleteFiles")
  1154. '      direction$ = PopupModalDlg (DBLFS_REMOVEPRODFILES, DBLFS_REMOVEPRODFILES)
  1155.     
  1156.       '*    the callback did the work, on both IDC_OK and IDC_BACK we
  1157.       '* actually want to go next
  1158.       if direction$ = gBACK then
  1159.          direction$ = gNEXT        
  1160.       end if
  1161.    end if
  1162.  
  1163. '*** Below are two examples of how to surface a dialog to prompt the use wether
  1164. '*** they want to backup thier SmartMasters. The 2nd example should be used since it
  1165. '*** checks wether or not the Install is a Language Install. We do NOT want to surface
  1166. '*** this during a Language Install. There is no an example of how to setup your INF file
  1167. '*** (LYT/SCR) for this since it would of been alot more work to give a 'real' example.
  1168. '*** You can use Freeelance or WordPro's INF's as an example if this is necessary
  1169.  
  1170. 'Give user option to backup currently installed masters: Stolen from FLW: MN
  1171. '    IF network$ = gSTANDARD$ AND UILFS <> gBACK THEN
  1172. '        IF ( InstalledLFSVersion$ = "LFS" ) THEN
  1173. '            'REVIST Make sure we don't back up for a node.
  1174. '            IF (GetPersonalDir() = "") THEN
  1175. '                chpt$ = Lot_GetChapterFromKeyword("LFS_SMARTMASTERS")
  1176. '                 IF (Lot_GetChapterValInt(chpt$, F_INOROUT) = 1) THEN
  1177. '                IF (FIsKeywordinCopyList("LFS_SMARTMASTERS") = 1) THEN
  1178. '                     IF (GetSymbolValue(SYM_AUTOMATIONINST$) = gTRUE$) THEN
  1179. '                        IF (Lot_GetKeyValFromResponseFile("LFS","LFSBackupSmartMasters")="1") THEN
  1180. '                             LFSBackupSmartMasters = TRUE
  1181. '                          ELSE
  1182. '                            LFSBackupSmartMasters = FALSE
  1183. '                         END IF
  1184. '                       ELSE
  1185. '                        notused% = RegisterCallback("LFS", "LFSBACKUPMASTERSCB")
  1186. '                        UILFS = PopupModalDlg (DB_BACKUPLFSMAS, DB_BACKUPLFSMAS)
  1187. '                     END IF
  1188. '                 
  1189. '                     IF (LFSBackupSmartMasters% = TRUE) THEN
  1190. '                         DoBackupSmartMasters
  1191. '                    END IF
  1192. '                END IF
  1193. '                  END IF
  1194. '              END IF
  1195. '          END IF
  1196. '   END IF
  1197.  
  1198. '******Method 2 **********
  1199. '*** This method ensures that the dialog will NOT surface during a Language Install
  1200. '*** And handles some other stuff differently
  1201. '    Another method    taken from  LWP.LSS
  1202. '     Give user option to backup currently installed masters
  1203. '    
  1204. '      DIM PrevMasters$
  1205. '    IF InstalledLFSVersion$ <> "" AND network$ = gSTANDARD$ AND _
  1206. '         direction$ <> gBACK AND _
  1207. '          GetListItem(SYM_INSTALLKINDS$, prodno%) <> gLANGUAGEINSTALL$ _
  1208. '    THEN
  1209. '         IF DoesDirExist(GetPreviousMastersDir()) THEN
  1210. '              IF GetSymbolValue(SYM_AUTOMATIONINST$) = gTRUE$ THEN
  1211. '                LFSBackupSmartMasters% = Lot_GetKeyValFromResponseFile(_
  1212. '                     "LFS", "LFSBackupSmartMasters") <> "0"
  1213. '              ELSE
  1214. '                chpt$ = Lot_GetChapterFromKeyword("LFS_SMARTMASTERS")
  1215. '                 IF (Lot_GetChapterValInt(chpt$, F_INOROUT) = 1) THEN
  1216. '                      notused% = RegisterCallback("LFS", "LFSBACKUPMASTERSCB")
  1217. '                    direction$ = PopupModalDlg(DBLFS_BACKUPMASTERS, _
  1218. '                         DBLFS_BACKUPMASTERS)
  1219. '                  END IF
  1220. '                 END IF
  1221. '        END IF
  1222. '    END IF
  1223. '
  1224. END FUNCTION
  1225.  
  1226.  
  1227.  
  1228.  
  1229. '*************************************************************************
  1230. '** FUNCTION PreCopyConfigLFS (prodno%, network$, direction$, lic%) AS STRING
  1231. '**
  1232. '** Purpose: This is the very last function called before the space is
  1233. '**          accurately computed (to the last byte) and files are copied
  1234. '**          by the toolkit.  If you have any last minute changes to
  1235. '**          do, this is the time to do them.  example:
  1236. '**          Test for monitor resolution, and turn on the chapter
  1237. '**          in the copy list (a memory residident version of the INF file)
  1238. '**          with the appropriate resolution.
  1239. '**
  1240. '**          This is Where '96 version products should be removed
  1241. '**          
  1242. '** In Symbols : 
  1243. '** Out Symbols: 
  1244. '**            
  1245. '** Arguments:  All parameters are **read only**. 
  1246. '**          prodno%: This is your prodno%.  It is assigned to you by the
  1247. '**                   toolkit in the order in which you were registered.
  1248. '**                   When your product is part of SmartSuite, SmartSuite
  1249. '**                   will always be product #1. (prodno% >=1)
  1250. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1251. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1252. '**                      then step backwards
  1253. '**             lic%: TRUE | FALSE; TRUE licensing is turned on else it is off
  1254. '**     
  1255. '** Errors:    No return code for errors, you must Raise them
  1256. '** Author:    MMeth
  1257. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  1258. '**                             allow the user to step backwards.)
  1259. '**
  1260. '*************************************************************************
  1261.  
  1262. PUBLIC FUNCTION PreCopyConfigLFS (prodno%, network$, direction$, lic%) AS STRING
  1263.    DIM ObsProdDir$, installDir$, value$, ProdKey$, cbBuf&
  1264.    DIM rc%, notused%, szProd$, szVer$
  1265.    
  1266.     RemoveDevAndService     ' Remove the device and faxmanager
  1267.  
  1268.    '*** REMOVE PRIOR VERSION
  1269.    '*** This is the product name as found in the registry
  1270.    szProd$ = "LFS"
  1271.  
  1272.    '*** This is the old product version as found in the registry
  1273.    '*** In this case it happens to be the current version!
  1274.    szVer$ = "4.5"
  1275.  
  1276.    ProdKey$ = "Software\Lotus\" + szProd$ +"\" + szVer$ +"\"
  1277.    Value$ = "Path"
  1278.  
  1279.    '***Get the directory for the version to be removed
  1280.    IF Lot_DoesRegKeyExistEx(HKEY_LOCAL_MACHINE, ProdKey$) THEN
  1281.      rc% = Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, ProdKey$, _
  1282.            Value$, REG_DWORD, ObsProdDir$, cbBuf&)
  1283.  
  1284.      '***prepare the 2 paths for a string compare
  1285.      installDir$ = NullTrim(GetSymbolValue(szProd$ + "DIR"))
  1286.      ObsProdDir$ = NullTrim(ObsProdDir$)
  1287.      IF RIGHT$(installDir$,1) <> "\" THEN installDir$ = installDir$ + "\"
  1288.      IF RIGHT$(ObsProdDir$,1) <> "\" THEN ObsProdDir$ = ObsProdDir$ + "\"
  1289.  
  1290.      notused% = StrCompare(installDir$,ObsProdDir$,1)
  1291.   
  1292.      IF StrCompare(installDir$,ObsProdDir$,1) = 0 AND rc% = ERROR_SUCCESS THEN
  1293.          notused% = RemovePriorVersion( szProd$ , szVer$)
  1294.      Else
  1295.     RemoveLFS11        'Remove LFS 1.1 if installed on this machine
  1296.      END IF
  1297.    Else
  1298.      RemoveLFS11
  1299.    END IF
  1300.    '*** DONE REMOVING PRIOR VERSION
  1301.  
  1302.    PreCopyConfigLFS = gNEXT
  1303.  
  1304.    '//{{PYL_ADDED(SetBillBoardNumber)
  1305.    If network$ <> gNODE Then
  1306.       Reg_SetBillboardNumber prodno%, 3
  1307.    End If
  1308.    '//}}PYL_ADDED
  1309.  
  1310.  
  1311. END FUNCTION
  1312.  
  1313.  
  1314. '*************************************************************************
  1315. '** FUNCTION  AddTheBillBoardsLFS (prodno%, network$, direction$, nbytes&)
  1316. '**
  1317. '** Purpose: This is where to add the billboards using the function:
  1318. '**          AddToBillboardList. Use nbytes& as the last parameter to
  1319. '**          the MS-SETUP function AddToBillboardList
  1320. '**
  1321. '** In Symbols : 
  1322. '** Out Symbols: 
  1323. '**            
  1324. '** Arguments:  All parameters are **read only**. 
  1325. '**          prodno%: This is your prodno%.  It is assigned to you by the
  1326. '**                   toolkit in the order in which you were registered.
  1327. '**                   When your product is part of SmartSuite, SmartSuite
  1328. '**                   will always be product #1. (prodno% >=1)
  1329. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1330. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1331. '**                      then step backwards
  1332. '**           nbytes: Determines the duration of billboard timing.
  1333. '**             NOTE: Make sure to use billboard Ids that are unique to
  1334. '**                   your product. e.g. IDD_LFSBILLBD1_BMP & 
  1335. '**                   DB_LFSBILLBD1_BMP
  1336. '**     
  1337. '** Errors:    No return code for errors, you must Raise them
  1338. '** Author:    MMeth
  1339. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  1340. '**                             allow the user to step backwards.)
  1341. '**
  1342. '*************************************************************************
  1343.  
  1344. PUBLIC FUNCTION AddTheBillBoardsLFS (prodno%, network$, direction$, nbytes&) AS STRING
  1345.    AddTheBillBoardsLFS = direction$
  1346.    '' In the backwards case, keep backing up
  1347.    If direction$ = gBACK Then
  1348.       EXIT FUNCTION
  1349.    End If
  1350.  
  1351.    'psudo code follows as an example
  1352.    ''''If network$ <> gNODE$ Then
  1353.    ''''   SetListItem "IDC_BMP", 1, STR$(IDD_LFSBILLBD1_BMP)
  1354.    ''''   AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_LFSBILLBD1, "_FNameOrgDlgProc@16", nbytes& 
  1355.    ''''End If
  1356.  
  1357.    '//{{PYL_ADDED(BillBoards)
  1358.    If network$ <> gNODE$ Then
  1359.       SetListItem "IDC_BMP", 1, STR$(IDD_LFSTITLE_BMP)
  1360.       SetListItem "IDC_BMP", 2, STR$(IDD_LFSBILLBD1_BMP)
  1361.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_LFSBILLBD1, "_FNameOrgDlgProc@16", nbytes& 
  1362.  
  1363.       SetListItem "IDC_BMP", 1, STR$(IDD_LFSTITLE_BMP)
  1364.       SetListItem "IDC_BMP", 2, STR$(IDD_LFSBILLBD2_BMP)
  1365.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_LFSBILLBD2, "_FNameOrgDlgProc@16", nbytes& 
  1366.  
  1367.       SetListItem "IDC_BMP", 1, STR$(IDD_LFSTITLE_BMP)
  1368.       SetListItem "IDC_BMP", 2, STR$(IDD_LFSBILLBD3_BMP)
  1369.       AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_LFSBILLBD3, "_FNameOrgDlgProc@16", nbytes& 
  1370.  
  1371.       ''SetListItem "IDC_BMP", 1, STR$(IDD_LFSTITLE_BMP)
  1372.       ''SetListItem "IDC_BMP", 2, STR$(IDD_LFSBILLBD4_BMP)
  1373.       ''AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_LFSBILLBD4, "_FNameOrgDlgProc@16", nbytes& 
  1374.    End If
  1375.    '//}}PYL_ADDED
  1376.  
  1377. END FUNCTION
  1378.  
  1379. '***************************************************************************
  1380. '**      Function readOldServerNamesFromRegistry ()
  1381. '**
  1382. '**        Purpose: This is called to read the names of the old DB servers from
  1383. '**                 the registry if they exist.
  1384. '**
  1385. '**
  1386. '**
  1387. '**
  1388. '**
  1389. '**
  1390. '***************************************************************************
  1391. FUNCTION readOldServerNamesFromRegistry ()
  1392.     DIM szKey$,keyValue$
  1393.     DIM nSize&,regStatus&
  1394.     DIM gBuf as STRING * 256
  1395.     DIM tempstr$
  1396.     DIM length%
  1397.  
  1398.     nSize = 256
  1399.     szKey$ = gREGLOTUS+"LFS\4.5\System"
  1400.  
  1401.     regStatus = DoesRegKeyExistEx(HKEY_LOCAL_MACHINE,szKey$)
  1402.     
  1403.     If regStatus = 1 Then    'Yes the key exists in the Registry
  1404.         keyValue$ = "AdminServer"
  1405.         regStatus = Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, szKey$, keyValue$, REG_SZ, gBuf$, nSize)
  1406.         tempStr$ = TRIM$(LCase$(gBUF$))
  1407.         length=LEN(tempStr$)
  1408.         While asc(MID$(tempStr$,length,1)) = 0
  1409.             length = length - 1
  1410.             If length < 1 THEN
  1411.                 GOTO Admin
  1412.             End If
  1413.         WEND
  1414.     Admin:
  1415.         oldAdminServer$ = Left$(tempStr$,length)
  1416.  
  1417.         keyValue$="FormsServer"
  1418.         regStatus = Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, szKey$, keyValue$, REG_SZ, gBuf$, nSize)
  1419.         tempStr$ = TRIM$(LCase$(gBUF$))
  1420.         length=LEN(tempStr$)
  1421.         While asc(MID$(tempStr$,length,1)) = 0
  1422.             length = length - 1
  1423.             If length < 1 THEN
  1424.                 GOTO Forms
  1425.             End If
  1426.         WEND
  1427.     Forms:
  1428.         oldFormsServer$ = Left$(tempStr$,length)
  1429.  
  1430.         keyValue$="TransServer"
  1431.         regStatus = Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, szKey$, keyValue$, REG_SZ, gBuf$, nSize)
  1432.         tempStr$ = TRIM$(LCase$(gBUF$))
  1433.         length=LEN(tempStr$)
  1434.         While asc(MID$(tempStr$,length,1)) = 0
  1435.             length = length - 1
  1436.             If length < 1 THEN
  1437.                 GOTO Trans
  1438.             End If
  1439.         WEND
  1440.     Trans:
  1441.         oldTransServer$ = Left$(tempStr$,length)
  1442.  
  1443.         keyValue$="MailServer"
  1444.         regStatus = Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, szKey$, keyValue$, REG_SZ, gBuf$, nSize)
  1445.         tempStr$ = TRIM$(LCase$(gBUF$))
  1446.         length=LEN(tempStr$)
  1447.         While asc(MID$(tempStr$,length,1)) = 0
  1448.             length = length - 1
  1449.             If length < 1 THEN
  1450.                 GOTO MailServer
  1451.             End If
  1452.         WEND
  1453.     MailServer:
  1454.         mailServer$ = Left$(tempStr$,length)
  1455.  
  1456.         keyValue$="MailDatabase"
  1457.         regStatus = Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, szKey$, keyValue$, REG_SZ, gBuf$, nSize)
  1458.         tempStr$ = TRIM$(LCase$(gBUF$))
  1459.         length=LEN(tempStr$)
  1460.         While asc(MID$(tempStr$,length,1)) = 0
  1461.             length = length - 1
  1462.             If length < 1 THEN
  1463.                 GOTO MailFile
  1464.             End If
  1465.         WEND
  1466.     MailFile:
  1467.         mailFile$ = Left$(tempStr$,length)
  1468.  
  1469.         keyValue$ = "LogServer"
  1470.         regStatus = Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, szKey$, keyValue$, REG_SZ, gBuf$, nSize)
  1471.         tempStr$ = TRIM$(LCase$(gBUF$))
  1472.         length=LEN(tempStr$)
  1473.         While asc(MID$(tempStr$,length,1)) = 0
  1474.             length = length - 1
  1475.             If length < 1 THEN
  1476.                 GOTO LogServer
  1477.             End If
  1478.         WEND
  1479.     LogServer:
  1480.         oldLogServer$ = Left$(tempStr$,length)
  1481.  
  1482.     END IF
  1483. END FUNCTION
  1484. '*************************************************************************
  1485. '** FUNCTION PostCopyConfigLFS (prodno%, network$, direction$, programgroup$) AS STRING
  1486. '**
  1487. '** Purpose: This is called just after file copy has completed.
  1488. '**          This is your opportunity to do all the configuaration
  1489. '**          you need.  This includes:
  1490. '**          
  1491. '**          1. Writing to all your ini files
  1492. '**             Don't worry about ini files related to shared components
  1493. '**          2. Writing to OLE registration database
  1494. '**             Don't worry about OLE registration related to shared 
  1495. '**             components
  1496. '**          3. Writing to any other config files you may support
  1497. '**          4. Writing out user registration information,
  1498. '**             no matter how your product picks up this info
  1499. '**          5. Create any working directories
  1500. '**             A working directory is one that does not contain any
  1501. '**             files, thus the toolkit did not create it for you.
  1502. '**
  1503. '**          NOTE: THERE are many subtleties in here if you are
  1504. '**                dealing with node and CD installs.  In particular,
  1505. '**                you must be ***very*** careful to understand where the
  1506. '**                things are that you are pointing to.  They could
  1507. '**                be on the node, server, or CD!  This, in combination
  1508. '**                with the INF file for Server/Node, is probably the 
  1509. '**                trickiest part of writing a quality install.  When 
  1510. '**                configuring, you must be careful to consider what 
  1511. '**                happens if there is a pre-existing product on the 
  1512. '**                machine, in the same location or
  1513. '**                another one!  This is very very tricky.  What happens
  1514. '**                if you had a full installation previously in location C:\FOO
  1515. '**                and now the user is installing a minimum installation in loaction
  1516. '**                D:\FOO. 
  1517. '**
  1518. '**                Each and every thing you do for configuartion needs very
  1519. '**                careful thought.
  1520. '**
  1521. '**                WE support a function Lot_WhereIsFeature("FeatureID")
  1522. '**                This currrently tells you the location of a feature
  1523. '**                if the feature appears both in the SERVER.INF and the
  1524. '**                NODE.INF referred to by the same Keyword ID.
  1525. '**                We do not support CDs with this command yet, but we will 
  1526. '**                at some time.
  1527. '**
  1528. '**                Also look out for writing to a file when the directory
  1529. '**                doesn't exist.  If the user deselected one of your
  1530. '**                options, your install may still be running, but since
  1531. '**                there were no files to copy into the directory
  1532. '**                it wasn't created by the toolkit!
  1533. '**
  1534. '**                Finally, remember that configuration files generally
  1535. '**                hold the state that the user has customized earlier.
  1536. '**                Sometimes you don't want to overwrite these!
  1537. '**                You will primarily use three MS-SETUP functions
  1538. '**                in here: 
  1539. '**                1. CreateIniKeyValue  (writing to ini files)
  1540. '**                2. SetRegKeyValue     (writing to OLE reg DB)
  1541. '**
  1542. '**                CreateProgmanGroup &  ShowProgmanGroup are
  1543. '**                done for you by the time you reach this
  1544. '**                function.
  1545. '**
  1546. '**                You will not have to do any configuration of LOTUS SHARED
  1547. '**                tools.  The toolkit will do this for you.
  1548. '** In Symbols : 
  1549. '** Out Symbols: 
  1550. '**            
  1551. '** Arguments:  All parameters are **read only**. 
  1552. '**          prodno%: This is your prodno%.  It is assigned to you by the
  1553. '**                   toolkit in the order in which you were registered.
  1554. '**                   When your product is part of SmartSuite, SmartSuite
  1555. '**                   will always be product #1. (prodno% >=1)
  1556. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1557. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1558. '**                      then step backwards
  1559. '**    programgroup$: The name of the program group where the user chose to
  1560. '**                   install the program manager icons     
  1561. '**
  1562. '** Errors:    No return code for errors, you must Raise them
  1563. '** Author:    MMeth
  1564. '** Returns:   return: gNEXT 
  1565. '**
  1566. '*************************************************************************
  1567.  
  1568. PUBLIC FUNCTION PostCopyConfigLFS (prodno%, network$, direction$, programgroup$) AS STRING
  1569.     On Error GoTo processError
  1570.     DIM ripath$, ret%, notused%, LFSchpt$, workdir$, queuedir$
  1571.     DIM dbExists!,dbHasDocs!,areSameServers!,allLocal!
  1572. '    DIM notallLocal!
  1573.     DIM session As New NotesSession
  1574.  
  1575.  
  1576.     DIM dbLfsAdminNsf As NotesDatabase
  1577.     DIM dbLfsCoverNsf As NotesDatabase
  1578.     DIM dbLfsFaxNsf As NotesDatabase
  1579.     DIM dbLfsFormsNsf As NotesDatabase
  1580.     DIM dbLfsLogNsf As NotesDatabase
  1581.     DIM dbLfsMailNsf As NotesDatabase
  1582.     DIM dbLfsTransNsf As NotesDatabase
  1583.     DIM mailReplica As NotesDatabase
  1584.     DIM dbWebFaxNsf As NotesDatabase
  1585.  
  1586.     DIM msgboxmsg$, msgboxbasemsg$, msgboxtitle$
  1587.  
  1588.     DIM response As Integer
  1589.     DIM dbLfsTempNsf As NotesDatabase
  1590.     DIM collection As NotesDocumentCollection
  1591.     DIM doc As NotesDocument
  1592.     DIM n As Integer
  1593.     DIM tempdbname As STRING
  1594.     DIM oldPath As STRING
  1595.     DIM newPath As STRING
  1596.     DIM lfsiniPath$
  1597.     DIM DoReplica As Integer
  1598.     DIM tempMsg$
  1599.  
  1600.     mailserver$ = ""
  1601.     mailfile$ = ""
  1602.     lfsIniPath$ = GetWindowsDir() + "LFS.INI"
  1603. '    MessageBox "LFSINIPATH: "+lfsinipath$
  1604.     if DoesFileExist(lfsIniPath$,femExists) then
  1605.            if DoesIniKeyExist(lfsIniPath$,"LFS","LFS_ADMIN_SERVER") THEN
  1606.               oldadminserver$ = GetIniKeyString(lfsIniPath$,"LFS", "LFS_ADMIN_SERVER")
  1607. '            MessageBox "oldAdminServer: "+oldadminserver$
  1608.         End If
  1609.            if DoesIniKeyExist(lfsIniPath$,"LFS","LFS_FORM_SERVER") THEN
  1610.               oldformsserver$ = GetIniKeyString(lfsIniPath$,"LFS", "LFS_FORM_SERVER")
  1611.         End If
  1612.            if DoesIniKeyExist(lfsIniPath$,"LFS","LFS_MAIL_SERVER") THEN
  1613.               mailserver$ = GetIniKeyString(lfsIniPath$,"LFS", "LFS_MAIL_SERVER")
  1614.         End If
  1615.            if DoesIniKeyExist(lfsIniPath$,"LFS","LFS_MAIL_FILE") THEN
  1616.               mailfile$ = GetIniKeyString(lfsIniPath$,"LFS", "LFS_MAIL_FILE")
  1617.         End If
  1618.     Else 'read the entries from the registry
  1619.         Call readOldServerNamesFromRegistry()        
  1620.        End If
  1621.  
  1622.  
  1623.    PostCopyConfigLFS = direction$
  1624.    '' In the backwards case, keep backing up
  1625.    If direction$ = gBACK Then
  1626.       EXIT FUNCTION
  1627.    End If
  1628.  
  1629.     '**//{{PYL_ADDED(MAILSERVERFILE)
  1630.     if (LEN(mailserver$) < 1) THEN
  1631.         mailserver$ = session.GetEnvironmentString("MailServer", True)
  1632.         mailserver$ = Trim(mailserver$)
  1633.  
  1634.         If mailserver$ = "" Then
  1635.         End if
  1636.     End If
  1637.  
  1638.     if (LEN(mailfile$) < 1)    THEN
  1639.         mailfile$ = session.GetEnvironmentString("MailFile", True)
  1640.         mailfile$ = Trim(mailfile$)
  1641.  
  1642.         If mailfile$ = "" Then
  1643.         End if
  1644.     End If
  1645.  
  1646.     maildomain$ = session.GetEnvironmentString("Domain", True)
  1647.     maildomain$ = Trim(maildomain$)
  1648.  
  1649.     If maildomain$ = "" Then
  1650.     End if
  1651.  
  1652.     'Messagebox("MailServer = " & mailserver$ & "; " &"MailFile = " & mailfile$)
  1653.  
  1654.     admindbname$ = "LfsAdmin.nsf"
  1655.     coverdbname$ = "LfsCover.nsf"
  1656.     faxdbname$ = "LfsFax.nsf"
  1657.     formsdbname$ = "LfsForms.nsf"
  1658.     logdbname$ = "LfsLog.nsf"
  1659.     transdbname$ = "LfsTrans.nsf"
  1660.     ' PKK: (961118) added a temporary DB Name to use for upgrading the DBs also get the notes data directory, we need it.
  1661.     tempdbname$ = "LfsTempDB.nsf"
  1662.     WebFaxdbname$ = "WebFax.nsf"
  1663.  
  1664.     If DoDomino Then
  1665.         notused% = RegisterCallback("LFS", "LFSDOMINONOTESDBCB")
  1666.     Else
  1667.         notused% = RegisterCallback("LFS", "LFSNOTESDBCB")
  1668.     End If
  1669.     SetListItem "IDC_BMP", 1, STR$(IDB_LFSMAIL)
  1670.     SetListItem "IDC_BMP", 2, STR$(IDB_LFSADMIN)
  1671.    '    SetListItem "IDC_BMP", 3, STR$(IDB_LFSCOVER)
  1672.     SetListItem "IDC_BMP", 3, STR$(IDB_LFSFAX)
  1673.    '    SetListItem "IDC_BMP", 5, STR$(IDB_LFSFORMS)
  1674.    '    SetListItem "IDC_BMP", 6, STR$(IDB_LFSLOG)
  1675.    '    SetListItem "IDC_BMP", 7, STR$(IDB_LFSTRANS)
  1676.  
  1677.     If DoDomino Then
  1678.         direction$ = PopupModalDlg (DBLFS_DOMINO_NOTESDB, DBLFS_DOMINO_NOTESDB)
  1679.     Else
  1680.         direction$ = PopupModalDlg (DB_LFS_NOTESDB, DB_LFS_NOTESDB)
  1681.     End If
  1682.     If direction$ = gBACK Then
  1683.         QUIT
  1684.     End If
  1685.     '**//}}PYL_ADDED
  1686.  
  1687.     DIM dbLfsAdminNtf As New NotesDatabase("","LFSAdmin.ntf")
  1688.     DIM dbLfsCoverNtf As New NotesDatabase("","LFSCover.ntf")
  1689.     DIM dbLfsFaxNtf As New NotesDatabase("","LFSFax.ntf")
  1690.     DIM dbLfsFormsNtf As New NotesDatabase("","LFSForms.ntf")
  1691.     DIM dbLfsLogNtf As New NotesDatabase("","LFSLog.ntf")
  1692.     DIM dbLfsMailNtf As New NotesDatabase("","LFSMail.ntf")
  1693.     DIM dbLfsTransNtf As New NotesDatabase("","LFSTrans.ntf")
  1694.     DIM dbWebFaxNtf As New NotesDatabase("","WebFax.ntf")
  1695. '    MessageBox "Title and FileName: " & dblfsadminntf.title & ", " & dblfsadminntf.FileName
  1696.  
  1697.  
  1698.     '**//{{PYL_ADDED(CREATENOTESDB)
  1699. ' PKK (961118: Modified the message box text)
  1700. '    msgboxbasemsg$ = " already exists.  "+ _
  1701. '     "Do you wish to overwrite the existing Database?  "+ _
  1702. '     "Click ""YES"" to overwrite, ""NO"" to upgrade to new version, ""CANCEL"" to keep the existing Database."
  1703. '    msgboxtitle$ = "Creating Notes Database ..."
  1704.  
  1705. '********************************************************************************************************************
  1706. '        Creating Admin Database  ?On Domino Server?
  1707. '********************************************************************************************************************
  1708.     dbExists = False
  1709.     dbHasDocs = False
  1710.     allLocal = False
  1711.     oldadminserver$ = TRIM$(oldadminserver$)
  1712.     adminserver$ = TRIM$(adminserver$)
  1713.     tempMsg$ = "oldAdminServer:" & oldadminserver$ & "; adminserver:" & adminserver$
  1714. '    MessageBox tempMsg
  1715.     areSameServers = Not StrCompare (oldadminserver$, adminserver$,1)
  1716. '****New Policy for upgrade,Since it is impossible for us to know whether the two machines are same when one of the two
  1717. '****servers is local, we will always set the areSameServers flag to be true if one of the two servers is local.
  1718.     if (oldadminserver$ = "") and (adminserver$ = "") THEN
  1719.         allLocal = True
  1720.     ElseIf (oldadminserver$ = "") or (adminserver$ = "") THEN
  1721.         areSameServers = TRUE
  1722.     End If
  1723. '**** Register the callback for the confirmation dialog box for DB to be upgraded ort overwritten
  1724.     notused% = RegisterCallback("LFS", "LFSNotesDBUpgradeCB")
  1725.  
  1726. '**** open the databaseon the old server, if open then set the flags
  1727.     Set dbLfsAdminNsf = New NotesDatabase(oldadminserver$, admindbname$)
  1728.     If dbLfsAdminNsf.IsOpen Then
  1729.         dbExists = True
  1730.         If dbLfsAdminNsf.AllDocuments.Count > 0 Then
  1731.             dbHasDocs = True
  1732.         End If
  1733.     ELSE
  1734.         Set dbLfsAdminNsf = New NotesDatabase(adminserver$, admindbname$)
  1735.         If dbLfsAdminNsf.IsOpen Then
  1736.             dbExists = True
  1737.             If dbLfsAdminNsf.AllDocuments.Count > 0 Then
  1738.                 dbHasDocs = True
  1739.             End If
  1740.         End If
  1741.     End If
  1742.  
  1743. '    MessageBox "dbExists = "+str(dbExists)+"; dbHasDocs"+str(dbHasDocs)+"; areSameServers"+str(areSameServers)
  1744.  
  1745. '**** If DB does not exist then create a new one on the new server ans we are done.
  1746.     If Not dbExists Then
  1747. '**** There maybe a file with the same already on the machine, if so delete it first.
  1748.         Set dbLfsAdminNsf = New NotesDatabase(adminserver$,admindbname$)
  1749.         If dbLfsAdminNsf.IsOpen Then
  1750.             Call dbLfsAdminNsf.Remove
  1751.         End If
  1752.         Set dbLfsAdminNsf = dbLfsAdminNtf.CreateFromTemplate(adminserver$, admindbname$, True)
  1753.         dbLfsAdminNsf.Title = adminTitle$
  1754.     '**** done
  1755.     Else    '**** This is the messy part, check if the db has docs otherwise it is simpler
  1756.         If Not dbHasDocs Then
  1757.             Set dbLfsAdminNsf = New NotesDatabase(adminserver$, admindbname$)
  1758.             If dbLfsAdminNsf.IsOpen Then
  1759.                 Call dbLfsAdminNsf.Remove
  1760.             End If
  1761.             Set dbLfsAdminNsf = dbLfsAdminNtf.CreateFromTemplate(adminserver$, admindbname$, True)
  1762.             dbLfsAdminNsf.Title = "DFS Administration Database"
  1763.         '**** done
  1764.          Else    '**** has docs
  1765.             If areSameServers Then '**** use 3 button dialog box.
  1766.                 NameOfDBToUpgrade$ = admindbname$
  1767.                 if LEN(adminserver$) > 0 THEN
  1768.                     ServerOfDBtoUpgrade$ = adminserver$
  1769.                 Else
  1770.                     ServerOfDBtoUpgrade$ = "Local"
  1771.                 End If
  1772.                 direction$ = PopupModalDlg(DB_Create_Notes_DB,DB_Create_Notes_DB)
  1773.                 response = DBUpgradeOverwriteCancel%
  1774.                 If response = doOverwrite Then       'User says overwrite the database
  1775.                     Call dbLfsAdminNsf.Remove
  1776.                     Set dbLfsAdminNsf = New NotesDatabase(adminserver$, admindbname$)
  1777.                     If dbLfsAdminNsf.IsOpen Then
  1778.                         Call dbLfsAdminNsf.Remove
  1779.                     End If
  1780.                         Set dbLfsAdminNsf = dbLfsAdminNtf.CreateFromTemplate(adminserver$, admindbname$, True)
  1781.                     dbLfsAdminNsf.Title = adminTitle$
  1782.                 ElseIf response = doUpgrade Then    ' We need to create a temp DB, copy all documents from the old DB, delete the old DB and then rename the temp db
  1783.                     If Not allLocal Then '**** We are doing it on the server
  1784.                         Call CreateDBOnServerAndCopyDocs(dbLfsAdminNtf,dbLfsAdminNsf,oldadminserver$,adminserver$,_
  1785.                                                 adminTitle$,admindbname$)
  1786.                     Else  '**** all local operation
  1787.                         Call CreateDBandCopyDocs(dbLfsAdminNtf,dbLfsAdminNsf,adminTitle$,admindbname$)
  1788.                     End If
  1789.                 End If
  1790.             Else '**** servers are different, use 2 button dialog box
  1791.                 NameOfDBToUpgrade$ = admindbname$
  1792.                 ServerOfDBtoUpgrade$ = oldadminserver$
  1793.                 newServerName$ = adminserver$
  1794.                 direction$ = PopupModalDlg(DB_Create_Notes_DB_2Servers,DB_Create_Notes_DB_2Servers)
  1795.                 response = DBUpgradeOverwriteCancel%
  1796.                 If response = doBring Then  'bring forward the documents
  1797.                     Call CreateDBOnServerAndCopyDocs(dbLfsAdminNtf,dbLfsAdminNsf,oldadminserver$,adminserver$,_
  1798.                                                 adminTitle$,admindbname$)
  1799.                 Else  '**** create a new Db on the new server and done.
  1800.                     Set dbLfsAdminNsf = New NotesDatabase(adminserver$, admindbname$)
  1801.                     If dbLfsAdminNsf.IsOpen Then
  1802.                         Call dbLfsAdminNsf.Remove
  1803.                     End If
  1804.                     Set dbLfsAdminNsf = dbLfsAdminNtf.CreateFromTemplate(adminserver$, admindbname$, True)
  1805.                     dbLfsAdminNsf.Title = adminTitle$
  1806.                 End If
  1807.                 '**** done
  1808.             End If '**** areSameServers
  1809.         End If '**** dbHasDocs
  1810.     End If '**** dbExists
  1811.     SetAccessLevels dbLfsAdminNsf,ACLLEVEL_MANAGER,ACLLEVEL_NOACCESS
  1812.     EnableRoles dbLfsAdminNsf,"DominoFaxAdmin",ACLLEVEL_MANAGER,"FaxAdmin"
  1813.     EnableRoles dbLfsAdminNsf,"DominoFaxUsers",ACLLEVEL_MANAGER,"FaxUsers"
  1814.  
  1815.  
  1816.  
  1817. '********************************************************************************************************************
  1818. '        Creating Forms Database  ?On Domino Server?
  1819. '********************************************************************************************************************
  1820.     dbExists = False
  1821.     dbHasDocs = False
  1822.     allLocal = False
  1823.     oldformsserver$ = TRIM$(oldformsserver$)
  1824.     formsserver$ = TRIM$(formsserver$)
  1825.     areSameServers = Not StrCompare (oldformsserver$, formsserver$,1)
  1826. '****New Policy for upgrade,Since it is impossible for us to know whether the two machines are same when one of the two
  1827. '****servers is local, we will always set the areSameServers flag to be true if one of the two servers is local.
  1828.     if (oldformsserver$ = "") and (formsserver$ = "") THEN
  1829.         allLocal = True
  1830.     ElseIf (oldformsserver$ = "") or (formsserver$ = "") THEN
  1831.         areSameServers = TRUE
  1832.     End If
  1833. '    MessageBox "Length = " & Str(LEN(oldformsserver$)) & "; oldservername = " & oldformsserver$
  1834. '    MessageBox "Length = " & Str(LEN(formsserver$)) & "; servername = " & formsserver$
  1835. '    MessageBox "allLocal = " & Str(allLocal) & "; areSameServers = " & Str(areSameServers)
  1836. '**** Register the callback for the confirmation dialog box for DB to be upgraded ort overwritten
  1837.     notused% = RegisterCallback("LFS", "LFSNotesDBUpgradeCB")
  1838.  
  1839. '**** open the database on the old server, if open then set the flags
  1840.     Set dbLfsFormsNsf = New NotesDatabase(oldformsserver$, formsdbname$)
  1841.     If dbLfsFormsNsf.IsOpen Then
  1842.         dbExists = True
  1843.         If dbLfsFormsNsf.AllDocuments.Count > 0 Then
  1844.             dbHasDocs = True
  1845.         End If
  1846.     End If
  1847.     Call dbLfsFormsNsf.close
  1848.  
  1849. '    MessageBox "dbExists = "+str(dbExists)+"; dbHasDocs"+str(dbHasDocs)+"; areSameServers"+str(areSameServers)
  1850.  
  1851. '**** If DB does not exist then create a new one on the new server ans we are done.
  1852.     If Not dbExists Then
  1853. '**** There maybe a file with the same already on the machine, if so delete it first.
  1854.         Set dbLfsFormsNsf = New NotesDatabase(formsserver$,formsdbname$)
  1855.         If dbLfsFormsNsf.IsOpen Then
  1856.             Call dbLfsFormsNsf.Remove
  1857.         End If
  1858.         Set dbLfsFormsNsf = dbLfsFormsNtf.CreateFromTemplate(formsserver$, formsdbname$, True)
  1859.         dbLfsFormsNsf.Title = "DFS Forms Database"
  1860.     '**** done
  1861.     Else    '**** This is the messy part, check if the db has docs otherwise it is simpler
  1862.         If Not dbHasDocs Then
  1863.             Set dbLfsFormsNsf = New NotesDatabase(formsserver$, formsdbname$)
  1864.             If dbLfsFormsNsf.IsOpen Then
  1865.                 Call dbLfsFormsNsf.Remove
  1866.             End If
  1867.             Set dbLfsFormsNsf = dbLfsFormsNtf.CreateFromTemplate(formsserver$, formsdbname$, True)
  1868.             dbLfsFormsNsf.Title = "DFS Forms Database"
  1869.         '**** done
  1870.          Else    '**** has docs
  1871.             Set dbLfsFormsNsf = New NotesDatabase(oldformsserver$, formsdbname$)
  1872.             If areSameServers Then '**** use 3 button dialog box.
  1873.                 NameOfDBToUpgrade$ = formsdbname$
  1874.                 if LEN(formsserver$) > 0 THEN
  1875.                     ServerOfDBtoUpgrade$ = formsserver$
  1876.                 Else
  1877.                     ServerOfDBtoUpgrade$ = "Local"
  1878.                 End If
  1879.                 direction$ = PopupModalDlg(DB_Create_Notes_DB,DB_Create_Notes_DB)
  1880.                 response = DBUpgradeOverwriteCancel%
  1881.                 If response = doOverwrite Then       'User says overwrite the database
  1882.                     Call dbLfsFormsNsf.Remove
  1883.                     Set dbLfsFormsNsf = dbLfsFormsNtf.CreateFromTemplate(formsserver$, formsdbname$, True)
  1884.                     dbLfsFormsNsf.Title = "DFS Forms Database"
  1885.                 ElseIf response = doUpgrade Then    ' We need to create a temp DB, copy all documents from the old DB, delete the old DB and then rename the temp db
  1886.                     If NOT allLocal Then '**** We are doing it on the server
  1887.                         Call CreateDBOnServerAndCopyDocs(dbLfsFormsNtf,dbLfsFormsNsf,oldformsserver$,formsserver$,_
  1888.                                                 "DFS Forms Database",formsdbname$)
  1889.                     Else  '**** all local operation
  1890.                         Call CreateDBandCopyDocs(dbLfsFormsNtf,dbLfsFormsNsf,"DFS Forms Database",formsdbname$)
  1891.                     End If
  1892.                 End If
  1893.             Else '**** servers are different, use 2 button dialog box
  1894.                 NameOfDBToUpgrade$ = formsdbname$
  1895.                 ServerOfDBtoUpgrade$ = oldformsserver$
  1896.                 newServerName$ = formsserver$
  1897.                 direction$ = PopupModalDlg(DB_Create_Notes_DB_2Servers,DB_Create_Notes_DB_2Servers)
  1898.                 response = DBUpgradeOverwriteCancel%
  1899.                 If response = doBring Then  'bring forward the documents
  1900.                     Call CreateDBOnServerAndCopyDocs(dbLfsFormsNtf,dbLfsFormsNsf,oldformsserver$,formsserver$,_
  1901.                                                 "DFS Forms Database",formsdbname$)
  1902.                 Else  '**** create a new Db on the new server and done.
  1903.                     Set dbLfsFormsNsf = New NotesDatabase(formsserver$, formsdbname$)
  1904.                     If dbLfsFormsNsf.IsOpen Then
  1905.                         Call dbLfsFormsNsf.Remove
  1906.                     End If
  1907.                     Set dbLfsFormsNsf = dbLfsFormsNtf.CreateFromTemplate(formsserver$, formsdbname$, True)
  1908.                     dbLfsFormsNsf.Title = "DFS Forms Database"
  1909.                 End If
  1910.                 '**** done
  1911.             End If '**** areSameServers
  1912.         End If '**** dbHasDocs
  1913.     End If '**** dbExists
  1914.     SetAccessLevels dbLfsFormsNsf,ACLLEVEL_MANAGER,ACLLEVEL_MANAGER
  1915.  
  1916. '********************************************************************************************************************
  1917. '        Creating Log Database  ?On Domino Server?
  1918. '********************************************************************************************************************
  1919.     dbExists = False
  1920.     dbHasDocs = False
  1921.     allLocal = False
  1922.     oldlogserver$ = TRIM$(oldlogserver$)
  1923.     logserver$ = TRIM$(logserver$)
  1924.     areSameServers = Not StrCompare (oldlogserver$, logserver$,1)
  1925. '****New Policy for upgrade,Since it is impossible for us to know whether the two machines are same when one of the two
  1926. '****servers is local, we will always set the areSameServers flag to be true if one of the two servers is local.
  1927.     if (oldlogserver$ = "") and (logserver$ = "") THEN
  1928.         allLocal = True
  1929.     ElseIf (oldlogserver$ = "") or (logserver$ = "") THEN
  1930.         areSameServers = TRUE
  1931.     End If
  1932. '    MessageBox "Length = " & Str(LEN(oldlogserver$)) & "; oldservername = " & oldlogserver$
  1933. '    MessageBox "Length = " & Str(LEN(logserver$)) & "; servername = " & logserver$
  1934. '    MessageBox "allLocal = " & Str(allLocal) & "; areSameServers = " & Str(areSameServers)
  1935.  
  1936. '    notallLocal = NOT allLocal
  1937. '    MessageBox "oldlogserver " & oldlogServer$ 
  1938. '    MessageBox " logserver " & logserver$
  1939. '    MessageBox " allLocal " & str(allLocal)
  1940. '    MessageBox "; not alllocal" & str(notalllocal)
  1941. '**** Register the callback for the confirmation dialog box for DB to be upgraded ort overwritten
  1942.     notused% = RegisterCallback("LFS", "LFSNotesDBUpgradeCB")
  1943.  
  1944. '**** open the databaseon the old server, if open then set the flags
  1945.     Set dbLfsLogNsf = New NotesDatabase(oldlogserver$, logdbname$)
  1946.     If dbLfsLogNsf.IsOpen Then
  1947.         dbExists = True
  1948.         If dbLfsLogNsf.AllDocuments.Count > 0 Then
  1949.             dbHasDocs = True
  1950.         End If
  1951.     End If
  1952.  
  1953. '    MessageBox "dbExists = "+str(dbExists)+"; dbHasDocs"+str(dbHasDocs)+"; areSameServers"+str(areSameServers)
  1954.  
  1955. '**** If DB does not exist then create a new one on the new server ans we are done.
  1956.     If Not dbExists Then
  1957. '**** There maybe a file with the same already on the machine, if so delete it first.
  1958.         Set dbLfsLogNsf = New NotesDatabase(logserver$,logdbname$)
  1959.         If dbLfsLogNsf.IsOpen Then
  1960.             Call dbLfsLogNsf.Remove
  1961.         End If
  1962.         Set dbLfsLogNsf = dbLfsLogNtf.CreateFromTemplate(logserver$, logdbname$, True)
  1963.         dbLfsLogNsf.Title = "DFS Log Database"
  1964.     '**** done
  1965.     Else    '**** This is the messy part, check if the db has docs otherwise it is simpler
  1966.         If Not dbHasDocs Then
  1967.             Set dbLfsLogNsf = New NotesDatabase(logserver$, logdbname$)
  1968.             If dbLfsLogNsf.IsOpen Then
  1969.                 Call dbLfsLogNsf.Remove
  1970.             End If
  1971.             Set dbLfsLogNsf = dbLfsLogNtf.CreateFromTemplate(logserver$, logdbname$, True)
  1972.             dbLfsLogNsf.Title = "DFS Log Database"
  1973.         '**** done
  1974.          Else    '**** has docs
  1975.             If areSameServers Then '**** use 3 button dialog box.
  1976.                 NameOfDBToUpgrade$ = logdbname$
  1977.                 if LEN(logserver$) > 0 THEN
  1978.                     ServerOfDBtoUpgrade$ = logserver$
  1979.                 Else
  1980.                     ServerOfDBtoUpgrade$ = "Local"
  1981.                 End If
  1982.                 direction$ = PopupModalDlg(DB_Create_Notes_DB,DB_Create_Notes_DB)
  1983.                 response = DBUpgradeOverwriteCancel%
  1984.                 If response = doOverwrite Then       'User says overwrite the database
  1985.                     Call dbLfsLogNsf.Remove
  1986.                     Set dbLfsLogNsf = dbLfsLogNtf.CreateFromTemplate(logserver$, logdbname$, True)
  1987.                     dbLfsLogNsf.Title = "DFS Log Database"
  1988.                 ElseIf response = doUpgrade Then    ' We need to create a temp DB, copy all documents from the old DB, delete the old DB and then rename the temp db
  1989.                     If LEN(logserver$) > 0 Then '**** We are doing it on the server
  1990.                         Call CreateDBOnServerAndCopyDocs(dbLfsLogNtf,dbLfsLogNsf,oldlogserver$,logserver$,_
  1991.                                                 "DFS Log Database",logdbname$)
  1992.                     Else  '**** all local operation
  1993.                         Call CreateDBandCopyDocs(dbLfsLogNtf,dbLfsLogNsf,"DFS Log Database",logdbname$)
  1994.                     End If
  1995.                 End If
  1996.             Else '**** servers are different, use 2 button dialog box
  1997.                 NameOfDBToUpgrade$ = logdbname$
  1998.                 ServerOfDBtoUpgrade$ = oldlogserver$
  1999.                 newServerName$ = logserver$
  2000.                 direction$ = PopupModalDlg(DB_Create_Notes_DB_2Servers,DB_Create_Notes_DB_2Servers)
  2001.                 response = DBUpgradeOverwriteCancel%
  2002.                 If response = doBring Then  'bring forward the documents
  2003.                     Call CreateDBOnServerAndCopyDocs(dbLfsLogNtf,dbLfsLogNsf,oldlogserver$,logserver$,_
  2004.                                                 "DFS Log Database",logdbname$)
  2005.                 Else  '**** create a new Db on the new server and done.
  2006.                     Set dbLfsLogNsf = New NotesDatabase(logserver$, logdbname$)
  2007.                     If dbLfsLogNsf.IsOpen Then
  2008.                         Call dbLfsLogNsf.Remove
  2009.                     End If
  2010.                     Set dbLfsLogNsf = dbLfsLogNtf.CreateFromTemplate(logserver$, logdbname$, True)
  2011.                     dbLfsLogNsf.Title = "DFS Log Database"
  2012.                 End If
  2013.                 '**** done
  2014.             End If '**** areSameServers
  2015.         End If '**** dbHasDocs
  2016.     End If '**** dbExists
  2017.     SetAccessLevels dbLfsLogNsf,ACLLEVEL_MANAGER,ACLLEVEL_MANAGER
  2018.  
  2019. '********************************************************************************************************************
  2020. '        Creating Phone Translation Database    ?On Domino Server?
  2021. '********************************************************************************************************************
  2022.     dbExists = False
  2023.     dbHasDocs = False
  2024.     allLocal = False
  2025.     oldtransserver$ = TRIM$(oldtransserver$)
  2026.     transserver$ = TRIM$(transserver$)
  2027.     areSameServers = Not StrCompare (oldtransserver$, transserver$,1)
  2028. '****New Policy for upgrade,Since it is impossible for us to know whether the two machines are same when one of the two
  2029. '****servers is local, we will always set the areSameServers flag to be true if one of the two servers is local.
  2030. '    MessageBox "Length = " & Str(LEN(oldtransserver$)) & "; oldservername = " & oldtransserver$
  2031. '    MessageBox "Length = " & Str(LEN(transserver$)) & "; servername = " & transserver$
  2032. '    MessageBox "allLocal = " & Str(allLocal) & "; areSameServers = " & Str(areSameServers)
  2033.  
  2034.     areSameServers = Not StrCompare (oldtransserver$, transserver$,1)
  2035.     if (oldtransserver$ = "") and (transserver$ = "") THEN
  2036.         allLocal = True
  2037.     ElseIf (oldtransserver$ = "") or (transserver$ = "") THEN
  2038.         areSameServers = TRUE
  2039.     End If
  2040. '**** Register the callback for the confirmation dialog box for DB to be upgraded ort overwritten
  2041.     notused% = RegisterCallback("LFS", "LFSNotesDBUpgradeCB")
  2042.  
  2043. '**** open the databaseon the old server, if open then set the flags
  2044.     Set dbLfsTransNsf = New NotesDatabase(oldtransserver$, transdbname$)
  2045.     If dbLfsTransNsf.IsOpen Then
  2046.         dbExists = True
  2047.         If dbLfsTransNsf.AllDocuments.Count > 0 Then
  2048.             dbHasDocs = True
  2049.         End If
  2050.     End If
  2051.  
  2052.  
  2053. '**** If DB does not exist then create a new one on the new server ans we are done.
  2054.     If Not dbExists Then
  2055. '**** There maybe a file with the same already on the machine, if so delete it first.
  2056.         Set dbLfsTransNsf = New NotesDatabase(transserver$,transdbname$)
  2057.         If dbLfsTransNsf.IsOpen Then
  2058.             Call dbLfsTransNsf.Remove
  2059.         End If
  2060.         Set dbLfsTransNsf = dbLfsTransNtf.CreateFromTemplate(transserver$, transdbname$, True)
  2061.         dbLfsTransNsf.Title = phoneTitle$
  2062.     '**** done
  2063.     Else    '**** This is the messy part, check if the db has docs otherwise it is simpler
  2064.         If Not dbHasDocs Then
  2065.             Set dbLfsTransNsf = New NotesDatabase(transserver$, transdbname$)
  2066.             If dbLfsTransNsf.IsOpen Then
  2067.                 Call dbLfsTransNsf.Remove
  2068.             End If
  2069.             Set dbLfsTransNsf = dbLfsTransNtf.CreateFromTemplate(transserver$, transdbname$, True)
  2070.             dbLfsTransNsf.Title = phoneTitle$
  2071.         '**** done
  2072.          Else    '**** has docs
  2073. '            MessageBox "areSameServers = "+str(areSameServers)
  2074.             If areSameServers Then '**** use 3 button dialog box.
  2075.                 NameOfDBToUpgrade$ = transdbname$
  2076.                 if LEN(transserver$) > 0 THEN
  2077.                     ServerOfDBtoUpgrade$ = transserver$
  2078.                 Else
  2079.                     ServerOfDBtoUpgrade$ = "Local"
  2080.                 End If
  2081. '                MessageBox "3-Button, SameServers"
  2082.                 direction$ = PopupModalDlg(DB_Create_Notes_DB,DB_Create_Notes_DB)
  2083.                 response = DBUpgradeOverwriteCancel%
  2084.                 If response = doOverwrite Then       'User says overwrite the database
  2085.                     Call dbLfsTransNsf.Remove
  2086.                     Set dbLfsTransNsf = dbLfsTransNtf.CreateFromTemplate(transserver$, transdbname$, True)
  2087.                     dbLfsTransNsf.Title = phoneTitle$
  2088.                 ElseIf response = doUpgrade Then    ' We need to create a temp DB, copy all documents from the old DB, delete the old DB and then rename the temp db
  2089.                     If LEN(transserver$) > 0 Then '**** We are doing it on the server
  2090. '                        MessageBox "upgrading on server"
  2091.                         Call CreateDBOnServerAndCopyDocs(dbLfsTransNtf,dbLfsTransNsf,oldtransserver$,transserver$,_
  2092.                                                 phoneTitle$,transdbname$)
  2093.                     Else  '**** all local operation
  2094. '                        MessageBox "upgrading on local"
  2095.                         Call CreateDBandCopyDocs(dbLfsTransNtf,dbLfsTransNsf,phoneTitle$,transdbname$)
  2096.                     End If
  2097.                 End If
  2098.             Else '**** servers are different, use 2 button dialog box
  2099.                 NameOfDBToUpgrade$ = transdbname$
  2100.                 ServerOfDBtoUpgrade$ = oldtransserver$
  2101.                 newServerName$ = transserver$
  2102.  '                MessageBox "2-Button, different srvers: "+oldtransserver$+transserver$
  2103.                 direction$ = PopupModalDlg(DB_Create_Notes_DB_2Servers,DB_Create_Notes_DB_2Servers)
  2104.                 response = DBUpgradeOverwriteCancel%
  2105.                 If response = doBring Then  'bring forward the documents
  2106.                     Call CreateDBOnServerAndCopyDocs(dbLfsTransNtf,dbLfsTransNsf,oldtransserver$,transserver$,_
  2107.                                                 phoneTitle$,transdbname$)
  2108.                 Else  '**** create a new Db on the new server and done.
  2109.                     Set dbLfsTransNsf = New NotesDatabase(transserver$, transdbname$)
  2110.                     If dbLfsTransNsf.IsOpen Then
  2111.                         Call dbLfsTransNsf.Remove
  2112.                     End If
  2113.                     Set dbLfsTransNsf = dbLfsTransNtf.CreateFromTemplate(transserver$, transdbname$, True)
  2114.                     dbLfsTransNsf.Title = phoneTitle$
  2115.                 End If
  2116.                 '**** done
  2117.             End If '**** areSameServers
  2118.         End If '**** dbHasDocs
  2119.     End If '**** dbExists
  2120.     SetAccessLevels dbLfsTransNsf,ACLLEVEL_MANAGER,ACLLEVEL_MANAGER
  2121.  
  2122. '********************************************************************************************************************
  2123. '        Creating Fax Engine Queue Database
  2124. '********************************************************************************************************************
  2125.     dbExists = False
  2126.     dbHasDocs = False
  2127.  
  2128.     Set dbLfsFaxNsf = New NotesDatabase("", faxdbname$)
  2129.     If dbLfsFaxNsf.IsOpen Then
  2130.         dbExists = True
  2131.         If dbLfsFaxNsf.AllDocuments.Count > 0 Then
  2132.             dbHasDocs = True
  2133.         End If
  2134.     End If
  2135. ' Register the callback for the confirmation dialog box for DB to be upgraded ort overwritten
  2136.     notused% = RegisterCallback("LFS", "LFSNotesDBUpgradeCB")
  2137.     If Not dbExists Then
  2138.         Set dbLfsFaxNsf = dbLfsFaxNtf.CreateFromTemplate("", faxdbname$, True)
  2139.         dbLfsFaxNsf.Title = "DFS Fax Engine Queue Database"
  2140.     Else
  2141.         If Not dbHasDocs Then
  2142.             Call dbLfsFaxNsf.Remove
  2143.             Set dbLfsFaxNsf = dbLfsFaxNtf.CreateFromTemplate("", faxdbname$, True)
  2144.             dbLfsFaxNsf.Title = "DFS Fax Engine Queue Database"
  2145.         Else
  2146.             NameOfDBToUpgrade$ = faxdbname$
  2147.             ServerOfDBtoUpgrade$ = "Local"
  2148.             direction$ = PopupModalDlg(DB_Create_Notes_DB,DB_Create_Notes_DB)
  2149.             response = DBUpgradeOverwriteCancel%
  2150.             If response = doOverwrite Then
  2151.                 Call dbLfsFaxNsf.Remove
  2152.                 Set dbLfsFaxNsf = dbLfsFaxNtf.CreateFromTemplate("", faxdbname$, True)
  2153.                 dbLfsFaxNsf.Title = "DFS Fax Engine Queue Database"
  2154.             ElseIf response = doUpgrade Then     ' upgrade
  2155.                 Call CreateDBandCopyDocs(dbLfsFaxNtf, dbLfsFaxNsf,"DFS Fax Engine Queue Database",faxdbname$)
  2156.             End If '**** response = ?
  2157.         End If '**** dbHasDocs
  2158.     End If '**** dbExists
  2159.     SetAccessLevels dbLfsFaxNsf,ACLLEVEL_MANAGER,ACLLEVEL_MANAGER
  2160.  
  2161.  
  2162. '********************************************************************************************************************
  2163. '        Creating Cover Page Database
  2164. '********************************************************************************************************************
  2165.     dbExists = False
  2166.     dbHasDocs = False
  2167.  
  2168.     Set dbLfsCoverNsf = New NotesDatabase("", coverdbname$)
  2169.     If dbLfsCoverNsf.IsOpen Then
  2170.         dbExists = True
  2171.         If dbLfsCoverNsf.AllDocuments.Count > 0 Then
  2172.             dbHasDocs = True
  2173.         End If
  2174.     End If
  2175. ' Register the callback for the confirmation dialog box for DB to be upgraded ort overwritten
  2176.     notused% = RegisterCallback("LFS", "LFSNotesDBUpgradeCB")
  2177.     If Not dbExists Then
  2178.         Set dbLfsCoverNsf = dbLfsCoverNtf.CreateFromTemplate("", coverdbname$, True)
  2179.         dbLfsCoverNsf.Title = "DFS Cover Page Database"
  2180.     Else
  2181.         If Not dbHasDocs Then
  2182.             Call dbLfsCoverNsf.Remove
  2183.             Set dbLfsCoverNsf = dbLfsCoverNtf.CreateFromTemplate("", coverdbname$, True)
  2184.             dbLfsCoverNsf.Title = "DFS Cover Page Database"
  2185.         Else
  2186.             NameOfDBToUpgrade$ = coverdbname$
  2187.             ServerOfDBtoUpgrade$ = "Local"
  2188.             direction$ = PopupModalDlg(DB_Create_Notes_DB,DB_Create_Notes_DB)
  2189.             response = DBUpgradeOverwriteCancel%
  2190.             If response = doOverwrite Then
  2191.                 Call dbLfsCoverNsf.Remove
  2192.                 Set dbLfsCoverNsf = dbLfsCoverNtf.CreateFromTemplate("", coverdbname$, True)
  2193.                 dbLfsCoverNsf.Title = "DFS Cover Page Database"
  2194.             ElseIf response = doUpgrade Then     ' upgrade
  2195.                 Call CreateDBandCopyDocs(dbLfsCoverNtf, dbLfsCoverNsf,"DFS Cover Page Database",coverdbname$)
  2196.             End If '**** response = ?
  2197.         End If '**** dbHasDocs
  2198.     End If '**** dbExists
  2199.     SetAccessLevels dbLfsCoverNsf,ACLLEVEL_MANAGER,ACLLEVEL_MANAGER
  2200.  
  2201.  
  2202. '********************************************************************************************************************
  2203. '        Creating Mail Database
  2204. '********************************************************************************************************************
  2205.     dbExists = False
  2206.     dbHasDocs = False
  2207.  
  2208.     tempMailFile$ = "temp"+mailfile$
  2209.     Set dbLfsMailNsf = New NotesDatabase(mailserver$, mailfile$)
  2210.     If dbLfsMailNsf.IsOpen Then
  2211.         dbExists = True
  2212.         If dbLfsMailNsf.AllDocuments.Count > 0 Then
  2213.             dbHasDocs = True
  2214.         End If
  2215.     End If
  2216. '**** Register the callback for the confirmation dialog box for DB to be upgraded or overwritten
  2217.     notused% = RegisterCallback("LFS", "LFSNotesDBUpgradeCB")
  2218.     If Not dbExists Then
  2219.         Set dbLfsMailNsf = dbLfsMailNtf.CreateFromTemplate(mailserver$, mailfile$, True)
  2220.         dbLfsMailNsf.Title = "DFS Mail Database"
  2221.     Else
  2222.         If Not dbHasDocs Then
  2223.             Call dbLfsMailNsf.Remove
  2224.             Set dbLfsMailNsf = dbLfsMailNtf.CreateFromTemplate(mailserver$, mailfile$, True)
  2225.             dbLfsMailNsf.Title = "DFS Mail Database"
  2226.         Else
  2227.             NameOfDBToUpgrade$ = mailfile$
  2228.             ServerOfDBtoUpgrade$ = mailserver
  2229.             direction$ = PopupModalDlg(DB_Create_Notes_DB,DB_Create_Notes_DB)
  2230.             response = DBUpgradeOverwriteCancel%
  2231.             If response = doOverwrite Then
  2232.                 Call dbLfsMailNsf.Remove
  2233.                 Set dbLfsMailNsf = dbLfsMailNtf.CreateFromTemplate(mailserver$, mailfile$, True)
  2234.                 dbLfsMailNsf.Title = "DFS Mail Database"
  2235.             ElseIf response = doUpgrade Then  ' upgrade
  2236.                 Set mailReplica = New NotesDatabase(mailserver$, tempMailFile$)
  2237.                 If mailReplica.IsOpen Then
  2238.                     Call mailReplica.Remove
  2239.                 End If
  2240.                 Set mailReplica = dbLfsMailNsf.CreateReplica(mailserver$, tempMailFile$)
  2241.                  Set collection = mailReplica.AllDocuments
  2242.                 Call dbLfsMailNsf.Remove
  2243.                 Set dbLfsMailNsf = dbLfsMailNtf.CreateFromTemplate(mailserver$, mailfile$, True)
  2244.                 dbLfsMailNsf.Title = "DFS Mail Database"
  2245.  
  2246.                 For n = 1 To collection.Count
  2247.                     Set doc = collection.GetNthDocument(n)
  2248.                     Call doc.CopyToDatabase(dbLfsMailNsf)
  2249.                 Next
  2250.                 Call mailReplica.Remove
  2251.             End If  '**** response ?
  2252.         End If  '**** dbHasDocs
  2253.     End If   '**** dbExists
  2254.  
  2255.  
  2256. '********************************************************************************************************************
  2257. '        Creating WebFax Database On Domino Server
  2258. '********************************************************************************************************************
  2259.     If DoDomino Then
  2260.         Set dbWebFaxNsf = New NotesDatabase(dominoserver$, webFaxdbname$)
  2261. ' No need to ask the user whether they wish to upgrade the database, since there is nothingthey can customize in this db
  2262. '         MessageBox "WebFax Title = "+dbWebFaxNsf.Title
  2263.         If len(dbWebFaxNsf.Title) > 0 Then
  2264. '            MessageBox "WebFax Title = "+dbWebFaxNsf.Title
  2265.             Call dbWebFaxNsf.Remove
  2266.         End If
  2267.         Set dbWebFaxNsf = dbwebFaxNtf.CreateFromTemplate(dominoserver$, webfaxdbname$, True)
  2268.         SetAccessLevels dbWebFaxNsf,ACLLEVEL_MANAGER,ACLLEVEL_MANAGER
  2269.         EnableRoles dbWebFaxNsf,"DominoFaxAdmin",ACLLEVEL_MANAGER,"FaxAdmin"
  2270.         EnableRoles dbWebFaxNsf,"DominoFaxUsers",ACLLEVEL_MANAGER,"FaxUsers"
  2271.         dbWebFaxNsf.Title = "Domino Fax Server Database"
  2272.     End If
  2273.  
  2274. '********************************************************************************************************************
  2275. '       Done    Creating Databases 
  2276. '********************************************************************************************************************
  2277.  
  2278.    If network$ <> gNODE$ Then 
  2279.       SetSymbolValue SYM_CDDRIVE$, GetSymbolValue(SYM_INSTALL_SOURCE)
  2280.    End If
  2281.    
  2282.    ''** WRITE TO RI FILE
  2283.    ''*******************
  2284.    ripath$ = GetSymbolValue("LFSDIR") + "LFS.ri"
  2285.    If Lot_WriteToRiFile (ripath$) = FALSE Then
  2286.       '*** SHOULD BE RESOURCED STRING
  2287.       ErrorMsg SID_LFS,LdString(SID_LFS_ERR_RI) + ripath$
  2288.    End If
  2289.  
  2290.    If network$ = gSERVER$ OR network$ = gDISTRIBUTION Then
  2291.       GOTO SKIPCONFIG
  2292.    End If
  2293.  
  2294.    '** Write product specific registry keys
  2295.          AddRegistryKeysLFS prodno%, network$
  2296.  
  2297.    '** Write entries in win.ini
  2298.    '** Write entries in lfs.ini
  2299.    '** Log the product into \windows\lotus.ini
  2300.    '** Write the OLE registration
  2301.    '** Only write this stuff if program files installed
  2302.     LFSchpt$ = Lot_GetChapterFromKeyWord ("LFSTOP")
  2303.    IF (Lot_GetChapterValInt(LFSchpt$, F_INOROUT) = 1) THEN
  2304.     '** Write the OLE registration database
  2305.     ret% = Lot_WriteOLERegForLFS(network$, prodno%)
  2306.    END IF
  2307.  
  2308.    '**//{{PYL_ADDED(CREATE_QUEUE_DIR)
  2309.    '** Create queue directory for standard and node
  2310.    workdir$ = GetSymbolValue("LFSDIR")
  2311.    queuedir$ = MakePath(workdir$, "queue")
  2312.    IF DoesDirExist(queuedir$)=0 THEN
  2313.       CreateDir queuedir$, cmoNone
  2314.    END IF
  2315.    IF DoesDirExist(queuedir$)=0 THEN
  2316.      ShowPathError SID_ERR_CREATEDIR, 0, queuedir$
  2317.    END IF
  2318.    '**//}}PYL_ADDED
  2319.  
  2320.    '** Create work directory for standard and node
  2321.    ''''' workdir$ = GetSymbolValue("123WORKDIR")
  2322.    ''''' CreateDir workdir$, cmoNone
  2323.    ''''' IF DoesDirExist(workdir$)=0 THEN
  2324.    '''''    ShowPathError SID_ERR_CREATEDIR, 0, workdir$
  2325.    ''''' END IF
  2326.    '** Write the uninstaller - but only for the primary language
  2327.  
  2328.    If GetSymbolValue(SYM_INSTALLKIND$) <> gLANGUAGEINSTALL$ Then 
  2329. '
  2330. ' Hardcoded the product name to be LFS because of the LFS vs DFS confusion 
  2331. '  in this release. Should clean up in the next release.
  2332. '
  2333. '        notused%=Lot_RegisterUninstaller(LdString(SID_LFS_PROD_NAME),_
  2334. '                                    LdString(SID_LFS_PROD_VER),_
  2335. '                                    "Lotus Notes Fax Server 4.5", _
  2336. '                                    GetSymbolValue("LFSDIR")+"lfs.inf",_
  2337. '                                    TRUE,FALSE,_
  2338. '                                    GetSymbolValue(SYM_INSTALL_LANGUAGE$),_
  2339. '                                    "c:\uninst.log","",_
  2340. '                                    "ME the user")
  2341.         notused%=Lot_RegisterUninstaller("LFS",_
  2342.                                     LdString(SID_LFS_PROD_VER),_
  2343.                                     "Lotus Notes Fax Server 4.5", _
  2344.                                     GetSymbolValue("LFSDIR")+"lfs.inf",_
  2345.                                     TRUE,FALSE,_
  2346.                                     GetSymbolValue(SYM_INSTALL_LANGUAGE$),_
  2347.                                     "c:\uninst.log","",_
  2348.                                     "ME the user")
  2349.    End If
  2350.  
  2351.  
  2352. SKIPCONFIG:
  2353.     EXIT FUNCTION
  2354.  
  2355. processError:
  2356.     MessageBox Err() & ":" & Error() & chr(10) & "This error occurred on Line number " & Erl() & " while creating the DFS databases."
  2357.     Error STFQUIT
  2358.  
  2359. END FUNCTION
  2360.  
  2361. '*************************************************************************
  2362. '** SUB SetAccessLevels
  2363. '*************************************************************************
  2364. SUB SetAccessLevels(newdb As NotesDatabase,defACL%,anonymACL%)
  2365.   DIM acl As NotesACL
  2366.   DIM firstEntry As NotesACLEntry    ' This will be the default entry
  2367.   Set acl = newdb.ACL
  2368.   Set firstEntry = acl.GetFirstEntry
  2369.   firstEntry.Level = defACL
  2370.   Call acl.CreateACLEntry("Anonymous",AnonymACL)
  2371.   Call acl.Save
  2372. END SUB
  2373.  
  2374. '*************************************************************************
  2375. '** SUB EnableRoles
  2376. '*************************************************************************
  2377. SUB EnableRoles(newdb As NotesDatabase,person AS STRING, acllevel%, role AS STRING)
  2378.   DIM acl As NotesACL
  2379.   Set acl = newdb.ACL
  2380.   DIM user As New NotesACLEntry(acl, person, acllevel%)
  2381.   Call user.EnableRole(role)
  2382.   Call acl.Save
  2383. END SUB
  2384.  
  2385. '*************************************************************************
  2386. '** SUB CreateDBandCopyDocs
  2387. '*************************************************************************
  2388. SUB CreateDBandCopyDocs(newTemplate As NotesDatabase, currentDB As NotesDatabase, title$, filename$)
  2389.  
  2390.     On Error GoTo processError
  2391.     DIM session As New NotesSession
  2392.     DIM dbLfsTempNsf As NotesDatabase
  2393.     DIM collection As NotesDocumentCollection
  2394.     DIM dc As NotesDocumentCollection
  2395.     DIM doc As NotesDocument
  2396.     DIM n As Integer
  2397.     DIM tempdbname As STRING
  2398.     DIM dataDirectory As STRING
  2399.     DIM searchString As String
  2400.     DIM dateTime As New NotesDateTime("01/01/80")
  2401.     DIM view As NotesView
  2402.     DIM server
  2403.     DIM tempDB As NotesDatabase
  2404.  
  2405.  
  2406.  
  2407.     tempdbname$    = "DfsTempDB.nsf"
  2408.     dataDirectory$ = session.GetEnvironmentString("Directory",True) + "\"
  2409.     Set collection = currentDB.AllDocuments
  2410.     
  2411.     Set tempDB = New NotesDatabase("", "DfsTempDB.nsf")
  2412.     If tempDB.IsOpen Then
  2413.         tempDB.Remove
  2414.         Set tempDB = New NotesDatabase("", "DfsTempDB.nsf")
  2415.         If tempDB.IsOpen Then
  2416.             tempDB.Remove
  2417.         End If
  2418.     End If
  2419.     Set dbLfsTempNsf = newTemplate.CreateFromTemplate("", tempdbname$, True)
  2420.     dbLfsTempNsf.Title = title$
  2421. '    MessageBox "Phone Title= "+phoneTitle$
  2422. '    MessageBox "Title = "+title$
  2423.     If StrCompare(title$,adminTitle$,1) = 0 Then
  2424.         searchString$ = "Form = ""DefaultUserProfile"""
  2425.         Set dc = currentDB.Search(searchString,dateTime,0)
  2426.         If (dc.Count > 0) Then
  2427.             'delete the default user Profile doc from the newly created DB
  2428.             Set view = dbLfsTempNsf.GetView("3. User Profiles\Default User")
  2429.             Set doc = view.GetFirstDocument
  2430.             Call doc.Remove(True)
  2431.         End If
  2432.         searchString$ = "Form = ""System Configuration"""
  2433.         Set dc = currentDB.Search(searchString, dateTime,0)
  2434.         If (dc.Count > 0) Then
  2435.             'delete the System Configuration Profile doc from the newly created DB
  2436.             Set view = dbLfsTempNsf.GetView("2. Configuration\System Configuration Profile")
  2437.             Set doc = view.GetFirstDocument
  2438.             Call doc.Remove(True)
  2439.         End If
  2440.     ElseIf StrCompare(title$,phoneTitle$,1) = 0 Then
  2441. '        MessageBox "doing Phone Translation Database"
  2442.         searchString$ = "Form = ""Delay Character"""
  2443.         Set dc = currentDB.Search(searchString,dateTime,0)
  2444.         If (dc.Count > 0) Then
  2445. '            MessageBox "We found an existing Delay Character Document...deleting"
  2446.             'delete the default user Profile doc from the newly created DB
  2447.             Set view = dbLfsTempNsf.GetView("Delay Character")
  2448.             Set doc = view.GetFirstDocument
  2449.             Call doc.Remove(True)
  2450.         End If
  2451.         
  2452.     End If
  2453.     For n = 1 To collection.Count
  2454.         Set doc = collection.GetNthDocument(n)
  2455.         Call doc.CopyToDatabase(dbLfsTempNsf)
  2456.     Next
  2457.     
  2458.     'remove the currentDb and then rename the file.
  2459.     
  2460.     Call dbLfsTempNsf.close
  2461.     Call currentDB.Remove
  2462.  
  2463.     Name (dataDirectory$+tempdbname$) As (dataDirectory$+filename$)
  2464.     Set currentDB = New NotesDatabase("",filename$)
  2465.     EXIT SUB
  2466.  
  2467. processError:
  2468.     MessageBox Err() & ":" & Error() & chr(10) & "This error occurred on Line number " & Erl() & " while creating the DFS databases."
  2469.     Error STFQUIT
  2470.  
  2471. END SUB
  2472.  
  2473. '*************************************************************************
  2474. '** SUB CreateDBOnServerAndCopyDocs
  2475. '**        This subroutine is called when
  2476. '*************************************************************************
  2477. SUB CreateDBOnServerAndCopyDocs(newTemplate As NotesDatabase, currentDB As NotesDatabase,_ 
  2478.                                     oldserver$, newserver$, title$, filename$)
  2479.  
  2480.     On Error GoTo processError
  2481.     DIM session As New NotesSession
  2482.     DIM dbLfsTempNsf As NotesDatabase
  2483.     DIM tempReplica As NotesDatabase
  2484.     DIM collection As NotesDocumentCollection
  2485.     DIM dc As NotesDocumentCollection
  2486.     DIM doc As NotesDocument
  2487.     DIM n As Integer
  2488.     DIM tempdbname As STRING
  2489.     DIM dataDirectory As STRING
  2490.     DIM searchString As String
  2491.     DIM dateTime As New NotesDateTime("01/01/80")
  2492.     DIM view As NotesView
  2493.     DIM DoReplica As Integer
  2494.     DIM tempDb As NotesDatabase
  2495.  
  2496.     Set collection = currentDB.AllDocuments
  2497.     ' If there are any documents in the current database then Make a replica of the database, 
  2498.     ' delete the original, create the new db, copy all documents.
  2499.     DoReplica% = collection.Count > 0
  2500.     If DoReplica% Then
  2501.         Set tempDB = New NotesDatabase(newserver$, "DfsTempDB.nsf")
  2502.         If tempDB.IsOpen Then
  2503.             tempDB.Remove
  2504.         End If
  2505.         Set tempReplica = currentDB.CreateReplica(newserver$, "DfsTempDB.nsf")
  2506.         Set collection = tempReplica.AllDocuments
  2507.     End If
  2508.  
  2509. '    We may have problem deleting the database, let us close it and open it agin and then remove it.
  2510.     
  2511. '    currentDB.Close
  2512. '    Set currentDB=New NotesDatabase(newserver$, filename$)
  2513.  
  2514. '    if currentDB.IsOpen() Then
  2515. '        MessageBox "we have successfully reopened the database"
  2516. '    End If
  2517.  
  2518.     Call currentDB.Remove
  2519.     Set dbLfsTempNsf = newTemplate.CreateFromTemplate(newserver$, filename$, False)
  2520.     dbLfsTempNsf.Title = title$
  2521.  
  2522.  
  2523.     dbLfsTempNsf.Title = title$
  2524.  
  2525.     If StrCompare(title$,adminTitle$,1) = 0 Then
  2526.         searchString$ = "Form = ""DefaultUserProfile"""
  2527.         Set dc = tempReplica.Search(searchString,dateTime,0)
  2528.         If (dc.Count > 0) Then
  2529.             'delete the default user Profile doc from the newly created DB
  2530.             Set view = dbLfsTempNsf.GetView("3. User Profiles\Default User")
  2531.             Set doc = view.GetFirstDocument
  2532.             Call doc.Remove(True)
  2533.         End If
  2534.         searchString$ = "Form = ""System Configuration"""
  2535.         Set dc = tempReplica.Search(searchString, dateTime,0)
  2536.         If (dc.Count > 0) Then
  2537.             'delete the System Configuration Profile doc from the newly created DB
  2538.             Set view = dbLfsTempNsf.GetView("2. Configuration\System Configuration Profile")
  2539.             Set doc = view.GetFirstDocument
  2540.             Call doc.Remove(True)
  2541.         End If
  2542.     ElseIf StrCompare(title$,phoneTitle$,1) = 0 Then
  2543.         searchString$ = "Form = ""Delay Character"""
  2544.         Set dc = tempReplica.Search(searchString,dateTime,0)
  2545.         If (dc.Count > 0) Then
  2546.             'delete the default user Profile doc from the newly created DB
  2547.             Set view = dbLfsTempNsf.GetView("Delay Character")
  2548.             Set doc = view.GetFirstDocument
  2549.             Call doc.Remove(True)
  2550.         End If
  2551.     End If
  2552. '    ******************
  2553.     If DoReplica Then
  2554.         Set collection = tempReplica.AllDocuments        
  2555.         For n = 1 To collection.Count
  2556.             Set doc = collection.GetNthDocument(n)
  2557.             Call doc.CopyToDatabase(dbLfsTempNsf)
  2558.         Next
  2559.         Call tempReplica.Remove
  2560.     End If
  2561. '    assign the newly created database to currentDB
  2562.     SET currentDB = New NotesDatabase(newserver$, filename$) 
  2563.  
  2564. '    *******************
  2565.     EXIT SUB
  2566. processError:
  2567.     MessageBox Err() & ":" & Error() & chr(10) & "This error occurred on Line number " & Erl() & " while creating the DFS databases."
  2568.     Error STFQUIT
  2569. END SUB
  2570.  
  2571. '*************************************************************************
  2572. '** PUBLIC SUB AddRegistryKeysLFS (prodno%, network$) 
  2573. '**
  2574. '** Purpose: This is called just after file copy has completed.
  2575. '**          1. Add product specific Registry Keys.
  2576. '**
  2577. '**           Each and every thing you do for configuartion needs very
  2578. '**           careful thought.
  2579. '**
  2580. '** In Symbols : 
  2581. '** Out Symbols: 
  2582. '**            
  2583. '** Arguments:  All parameters are **read only**. 
  2584. '**          prodno%: This is your prodno%.  It is assigned to you by the
  2585. '**                   toolkit in the order in which you were registered.
  2586. '**                   When your product is part of SmartSuite, SmartSuite
  2587. '**                   will always be product #1. (prodno% >=1)                                            
  2588. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  2589. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  2590. '**                      then step backwards
  2591. '**    programgroup$: The name of the program group where the user chose to
  2592. '**                   install the program manager icons     
  2593. '**
  2594. '** Errors:    No return code for errors, you must Raise them
  2595. '** Author:    PMD
  2596. '**
  2597. '*************************************************************************
  2598. PUBLIC SUB AddRegistryKeysLFS (prodno%, network$) 
  2599. DIM LocPath$, Filename$, descript$, gbuf$, instvalue&
  2600. DIM szkey$, szkey2$, nsize&, nsize1&,nsize2&,Insttype$,nsize3
  2601. DIM RegStatus&, keyvalue$, keyvalue1$,keyvalue2$, keyvalue3$, keyvalue4$ 
  2602.  
  2603. DIM session As New NotesSession
  2604. '**//{{PYL_ADDED(ADDEDSUBKEY)
  2605. DIM szSubKey1$, szSubKey2$
  2606. DIM locPath1$, nsizeLocPath1
  2607. DIM locPath2$, nsizeLocPath2
  2608. DIM cancelTimer&, idleTimer&, loadLevel&, timerTick&, timeoutTimer&
  2609. DIM adminDatabase$, nsizeAdminDatabase
  2610. DIM coverDatabase$, nsizeCoverDatabase
  2611. DIM formsDatabase$, nsizeformsDatabase
  2612. DIM faxDatabase$, nsizeFaxDatabase
  2613. DIM logDatabase$, nsizeLogDatabase
  2614. DIM mailDatabase$, nsizeMailDatabase
  2615. DIM transDatabase$, nsizeTransDatabase
  2616. DIM localServer$, nsizeLocalServer
  2617. DIM remoteServer$, nsizeRemoteServer
  2618. '**//}}PYL_ADDED
  2619. '** (961126:PKK -- Code to check whether there is an LFS.INI file in windows directory and read the timer values
  2620. '**     from the file.
  2621. DIM oldIdleTimer&, oldCancelTimer&, oldTimeOutTimer&, oldLFSIdleTimer&, oldLFSCancelTimer&, oldLFSTimerTick&
  2622. DIM lfsIniPath As STRING
  2623. DIM keyValueStr As STRING
  2624. lfsIniPath$ = GetWindowsDir() + "LFS.INI"
  2625. oldIdleTimer& = 30000    ' This is Hex 0x7530
  2626. oldCancelTimer& = 60000 'This is Hex 0xea60
  2627. oldTimeOutTimer& = 3
  2628. oldLFSIdleTimer& = 0
  2629. oldLFSCancelTimer& = 5
  2630. oldLFSTimerTick& = 1000 'This is Hex 0x3e8
  2631. if DoesFileExist(lfsIniPath$,femExists) then
  2632.    if DoesIniKeyExist(lfsIniPath$,"LFS","LFS_IDLE_TIMER") THEN
  2633.       keyValueStr$ = GetIniKeyString(lfsIniPath$,"LFS", "LFS_IDLE_TIMER")
  2634.       oldIdleTimer& = Val(keyValueStr$)
  2635.    End If
  2636. '   MessageBox "LFS_IDLE_TIMER="+keyValueStr$
  2637.  
  2638.    if DoesIniKeyExist(lfsIniPath$,"LFS","LFS_CANCEL_TIMER") THEN
  2639.       keyValueStr$ = GetIniKeyString(lfsIniPath$,"LFS", "LFS_CANCEL_TIMER")
  2640.       oldCancelTimer& = Val(keyValueStr$) 
  2641.    End If
  2642. '   MessageBox "LFS_CANCEL_TIMER="+keyValueStr$
  2643.    
  2644.    if DoesIniKeyExist(lfsIniPath$,"LFS","LFS_TIMEOUT_TIMER") THEN
  2645.       keyValueStr$ = GetIniKeyString(lfsIniPath$,"LFS", "LFS_TIMEOUT_TIMER")
  2646.       oldTimeOutTimer& = Val(keyValueStr$)
  2647.    End If
  2648. '   MessageBox "LFS_TIMEOUT_TIMER="+keyValueStr$
  2649.    
  2650.    if DoesIniKeyExist(lfsIniPath$,"LFS","IDLE_TIMER") THEN
  2651.       keyValueStr$ = GetIniKeyString(lfsIniPath$,"FAX", "IDLE_TIMER")
  2652.       oldLFSIdleTimer& = Val(keyValueStr$)
  2653.    End If
  2654. '   MessageBox "IDLE_TIMER="+keyValueStr$
  2655.    
  2656.    if DoesIniKeyExist(lfsIniPath$,"LFS","CANCEL_TIMER") THEN
  2657.       keyValueStr$ = GetIniKeyString(lfsIniPath$,"FAX", "CANCEL_TIMER")
  2658.       oldLFSCancelTimer& = Val(keyValueStr$)
  2659.    End If
  2660. '   MessageBox "CANCEL_TIMER="+keyValueStr$
  2661.    
  2662.    if DoesIniKeyExist(lfsIniPath$,"LFS","TIMER_TICK") THEN
  2663.       keyValueStr$ = GetIniKeyString(lfsIniPath$,"FAX", "TIMER_TICK")
  2664.       oldLFSTimerTick& = Val(keyValueStr$)
  2665.    End If
  2666. '   MessageBox "TIMER_TICK="+keyValueStr$
  2667. End If
  2668. szkey$ = gREGLOTUS+"LFS\4.5"
  2669. descript$ = "Domino Intranet Starter Pack 2.0 Fax Services"
  2670. keyvalue$ = "Path"
  2671. keyvalue1$ = "Description"
  2672. keyvalue2$ = "Name"
  2673. Insttype$ = "InstallType"
  2674. Filename = "lfs.exe"
  2675. nsize1 = len(Filename) + 1
  2676. nsize2 = len(descript$) + 1
  2677.  
  2678.    If network$ = gNODE$ Then
  2679.       instvalue = 1
  2680.    ElseIf network$ = gSTANDARD$ Then
  2681.       instvalue = 0
  2682.     End if
  2683.    nsize3 = 4
  2684.  
  2685.  
  2686.    If Lot_IsTheFeatureInstalled("LFSA") <> FALSE Then
  2687.        
  2688.         locpath$ = Lot_WhereIsFeature(prodno%, "LFSA", "lfs.exe")
  2689.         locpath = Lot_TrimEndSlash (locpath$) + "\"
  2690. ' Save the install path in the Notes.Ini as DFSPath. We will need for launching LFSRCI
  2691.         Call session.SetEnvironmentVar("DFS_Path",LocPath$)
  2692.         nsize = len(LocPath$) + 1
  2693.  
  2694.         regStatus& = Lot_RegCreateKeyEx(HKEY_LOCAL_MACHINE, szkey)
  2695.         regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, keyvalue$, REG_SZ, LocPath$, nsize)
  2696.         regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, keyvalue2$, REG_SZ, Filename, nsize1)
  2697.         regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, keyvalue1$, REG_SZ, descript$, nsize2)
  2698.         regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, Insttype$, REG_DWORD, instvalue, nsize3)
  2699.  
  2700.            IF regStatus& <> ERROR_SUCCESS THEN
  2701.                RegErrorMsg SID_ERR_REG_GENERIC, gHLM$+"\"+szkey,"",""
  2702.           END IF
  2703.  
  2704.         '**//{{PYL_ADDED(ADDEDSUBKEY_FAXENGINE)
  2705.         locPath1$ = Lot_WhereIsFeature(prodno%, "LFSA", "lfsfax.exe")
  2706.         locPath1 = Lot_TrimEndSlash (locPath1$) + "\"
  2707.         nsizeLocPath1 = len(locPath1$) + 1
  2708.         localServer$ = ""
  2709.         nsizeLocalServer = len(localServer$) + 1
  2710. '** bring forward any ini settings that we found.
  2711. '****************************************************************************************************************
  2712.         If oldLFSCancelTimer = 5 THEN
  2713.             cancelTimer = 5
  2714.         ElseIf oldLFSCancelTimer >= 0 THEN
  2715.             cancelTimer = oldLFSCancelTimer
  2716.         Else
  2717.             cancelTimer = 5
  2718.         End If
  2719. '****************************************************************************************************************
  2720.         If oldLFSIdleTimer >= 0 THEN
  2721.             idleTimer = oldLFSIdleTimer
  2722.         Else
  2723.             idleTimer = 0
  2724.         End If
  2725.         loadLevel = 0
  2726.         If oldLFSTimerTick >= 0 THEN
  2727.             timerTick = oldLFSTimerTick
  2728.         Else
  2729.             timerTick = 1000
  2730.         End If
  2731.         faxDatabase$ = GetSymbolValue("NOTESDATADIR")+"\"+faxdbname$
  2732.         nsizeFaxDatabase = len(faxDatabase$) + 1
  2733.  
  2734.         szSubKey1$ = gREGLOTUS+"LFS\4.5"+"\FaxEngine"
  2735.         regStatus& = Lot_RegCreateKeyEx(HKEY_LOCAL_MACHINE, szSubKey1)
  2736.         regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szSubKey1, "CancelTimer", REG_DWORD, cancelTimer, nsize3)
  2737.         regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szSubKey1, "IdleTimer", REG_DWORD, idleTimer, nsize3)
  2738.         regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szSubKey1, "LoadLevel", REG_DWORD, loadLevel, nsize3)
  2739.         regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szSubKey1, "TimerTick", REG_DWORD, timerTick, nsize3)
  2740.         regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szSubKey1, "Path", REG_SZ, LocPath1$, nsizeLocPath1)
  2741.         regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szSubKey1, "QueueDatabase", REG_SZ, faxDatabase$, nsizeFaxDatabase)
  2742.         regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szSubKey1, "QueueServer", REG_SZ, localServer$, nsizeLocalServer)
  2743.  
  2744.          IF regStatus& <> ERROR_SUCCESS THEN
  2745.             RegErrorMsg SID_ERR_REG_GENERIC, gHLM$+"\"+szSubKey1,"",""
  2746.           END IF
  2747.         '**//}}PYL_ADDED
  2748.  
  2749.         '**//{{PYL_ADDED(ADDEDSUBKEY_SYSTEM)
  2750.         locPath2$ = locPath$
  2751.         nsizeLocPath2 = len(locPath2$) + 1
  2752.         If oldCancelTimer >= 0 THEN
  2753.             cancelTimer = oldCancelTimer
  2754.         Else
  2755.             cancelTimer = 60000
  2756.         End If
  2757.         If oldIdleTimer >= 0 THEN
  2758.             idleTimer = oldIdleTimer
  2759.         Else
  2760.             idleTimer = 0
  2761.         End If
  2762.         If oldTimeOutTimer >= 0 THEN
  2763.             timeoutTimer = oldTimeOutTimer
  2764.         Else
  2765.             timeoutTimer = 3
  2766.         End If
  2767.         If DoDomino Then
  2768.             adminDatabase$ = admindbname$        
  2769.         Else
  2770.             If Len(adminserver$) > 0 Then   'This is the fix for config 3' where admin db is installed on a server
  2771.                 adminDatabase$ = admindbname$
  2772.             Else
  2773.                 adminDatabase$ = GetSymbolValue("NOTESDATADIR")+"\"+admindbname$
  2774.             End If
  2775.         End If
  2776.         nsizeAdminDatabase = len(adminDatabase$) + 1
  2777.         If DoDomino Then
  2778.             formsDatabase$ = formsdbname$        
  2779.         Else
  2780.             If Len(formsserver$) > 0 Then   'see the comments above in case of admin db
  2781.                 formsDatabase$ = formsdbname$
  2782.             Else
  2783.                 formsDatabase$ = GetSymbolValue("NOTESDATADIR")+"\"+formsdbname$
  2784.             End If
  2785.         End If
  2786.         nsizeFormsDatabase = len(formsDatabase$) + 1
  2787.         If DoDomino Then
  2788.             logDatabase$ = logdbname$        
  2789.         Else
  2790.             logDatabase$ = GetSymbolValue("NOTESDATADIR")+"\"+logdbname$
  2791.         End If
  2792.         nsizeLogDatabase = len(logDatabase$) + 1
  2793.         If DoDomino Then
  2794.             transDatabase$ = transdbname$        
  2795.         Else
  2796.             transDatabase$ = GetSymbolValue("NOTESDATADIR")+"\"+transdbname$
  2797.         End If
  2798.         nsizeTransDatabase = len(transDatabase$) + 1
  2799.         mailDatabase$ = mailfile$
  2800.         nsizeMailDatabase = len(mailDatabase$) + 1
  2801.         remoteServer$ = mailserver$
  2802.         nsizeRemoteServer = len(remoteServer$) + 1
  2803.         coverDatabase$ = GetSymbolValue("NOTESDATADIR")+"\"+coverdbname$
  2804.         nsizeCoverDatabase = len(coverDatabase$) + 1
  2805.         'MessageBox("MailServer = " & mailserver$ & "; " & "RemoteServer = " & remoteServer$)
  2806.  
  2807.         szSubKey2$ = gREGLOTUS+"LFS\4.5"+"\System"
  2808.         regStatus& = Lot_RegCreateKeyEx(HKEY_LOCAL_MACHINE, szSubKey2)
  2809.         regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szSubKey2, "CancelTimer", REG_DWORD, cancelTimer, nsize3)
  2810.         regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szSubKey2, "IdleTimer", REG_DWORD, idleTimer, nsize3)
  2811.         regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szSubKey2, "TimeoutTimer", REG_DWORD, timeoutTimer, nsize3)
  2812.         regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szSubKey2, "Path", REG_SZ, LocPath2$, nsizeLocPath2)
  2813.         regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szSubKey2, "AdminDatabase", REG_SZ, adminDatabase$, nsizeAdminDatabase)
  2814.         regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szSubKey2, "AdminServer", REG_SZ, adminServer$, len(adminServer$) + 1)
  2815.         regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szSubKey2, "CoverDatabase", REG_SZ, coverDatabase$, nsizeCoverDatabase)
  2816.         regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szSubKey2, "CoverServer", REG_SZ, localServer$, nsizelocalServer)
  2817.         regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szSubKey2, "FormsDatabase", REG_SZ, formsDatabase$, nsizeFormsDatabase)
  2818.         regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szSubKey2, "FormsServer", REG_SZ, formsServer$, len(formsServer$) + 1)
  2819.         regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szSubKey2, "LogDatabase", REG_SZ, logDatabase$, nsizeLogDatabase)
  2820.         regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szSubKey2, "LogServer", REG_SZ, logServer$, len(logServer$) + 1)
  2821.         regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szSubKey2, "MailDatabase", REG_SZ, mailDatabase$, nsizeMailDatabase)
  2822.         regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szSubKey2, "MailServer", REG_SZ, remoteServer$, nsizeRemoteServer)
  2823.         regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szSubKey2, "TransDatabase", REG_SZ, transDatabase$, len(transDatabase$) + 1)
  2824.         regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szSubKey2, "TransServer", REG_SZ, transServer$, len(transServer$) + 1)
  2825.         regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szSubKey2, "WebFaxDatabase", REG_SZ, "webfax.nsf", 11)
  2826.         regStatus = regStatus+Lot_CreateRegKeyValueEx(HKEY_LOCAL_MACHINE, szSubKey2, "DominoServer", REG_SZ, dominoServer$, len(dominoServer$) + 1)
  2827.  
  2828.          IF regStatus& <> ERROR_SUCCESS THEN
  2829.             RegErrorMsg SID_ERR_REG_GENERIC, gHLM$+"\"+szSubKey2,"",""
  2830.           END IF
  2831.         '**//}}PYL_ADDED
  2832.  
  2833.    end if
  2834.  
  2835.    '** Write the registry value to add the new language
  2836.         'AddRegistryLanguage LdString(SID_LFS_PROD_NAME), _
  2837.                                     LdString(SID_LFS_PROD_VER)
  2838.    
  2839.     'regStatus = DoesRegKeyExistEx(HKEY_LOCAL_MACHINE, szkey$)
  2840.  
  2841.      'if RegStatus = 1 then
  2842.         ' this is used to check the current value of an existing key.
  2843.           ' gbuf$ receives the key values data. 
  2844.         'regStatus& =  Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey, keyvalue$, 0, gbuf$, nsize) 
  2845.      'end if
  2846.    
  2847.     '*** Register the components installed with the product
  2848.     
  2849.     LFS_RegisterSharedComponent "WIN32SHRASWANPRG", "Aswan", "1.4"
  2850.     LFS_RegisterSharedComponent "WIN32SHRBENTOPRG", "Bento", "3.0"
  2851.     LFS_RegisterSharedComponent "WIN32SHRSHAREDHELPPRG", "Help", "3.1"
  2852.     LFS_RegisterSharedComponent "WIN32SHRLOTUSSCRIPTPRG", "LotusScript", "3.1"
  2853.     LFS_RegisterSharedComponent "WIN32SHRFILLSDATA", "Fills", "1.0"
  2854.     LFS_RegisterSharedComponent "WIN32SHRUINST", "Uninstall", "1.0"
  2855.     LFS_RegisterSharedComponent "WIN32SHRUINSTLANGEN", "Uninstall", "1.0"
  2856.  
  2857.  
  2858. END SUB
  2859.  
  2860.  
  2861.  
  2862. '*************************************************************************
  2863. '** FUNCTION AddIconsLFS (prodno%, network$, direction$, programgroup$) AS STRING
  2864. '**
  2865. '** Purpose: This is called just after file copy has completed.
  2866. '**          1. Add program manager icons of those features
  2867. '**             that were installed.
  2868. '**          NOTE: THERE are many subtleties in here if you are
  2869. '**                dealing with node and CD installs.  In particular,
  2870. '**                you must be ***very*** careful to understand where the
  2871. '**                things are that you are pointing to.  They could
  2872. '**                be on the node, server, or CD!  This, in combination
  2873. '**                with the INF file for Server/Node, is probably the 
  2874. '**                trickiest part of writing a quality install.  When 
  2875. '**                configuring, you must be careful to consider what 
  2876. '**                happens if there is a pre-existing product on the 
  2877. '**                machine, in the same location or
  2878. '**                another one!  This is very very tricky.  What happens
  2879. '**                if you had a full installation previously in location C:\FOO
  2880. '**                and now the user is installing a minimum installation in loaction
  2881. '**                D:\FOO. 
  2882. '**
  2883. '**                Each and every thing you do for configuartion needs very
  2884. '**                careful thought.
  2885. '**
  2886. '**                WE support a function Lot_WhereIsFeature("FeatureID")
  2887. '**                This currrently tells you the location of a feature
  2888. '**                if the feature appears both in the SERVER.INF and the
  2889. '**                NODE.INF referred to by the same Keyword ID.
  2890. '**                We do not support CDs with this command yet, but we will 
  2891. '**                at some time.
  2892. '**
  2893. '**                Also look out for writing to a file when the directory
  2894. '**                doesn't exist.  If the user deselected one of your
  2895. '**                options, your install may still be running, but since
  2896. '**                there were no files to copy into the directory
  2897. '**                it wasn't created by the toolkit!
  2898. '**
  2899. '**                Finally, remember that configuration files generally
  2900. '**                hold the state that the user has customized earlier.
  2901. '**                Sometimes you don't want to overwrite these!
  2902. '**                You will primarily use three MS-SETUP functions
  2903. '**                in here: 
  2904. '**                1. CreateProgmanItem  (writing to progman) 
  2905. '**
  2906. '**                CreateProgmanGroup &  ShowProgmanGroup are
  2907. '**                done for you by the time you reach this
  2908. '**                function.
  2909. '**
  2910. '**                You will not have to do any configuration of LOTUS SHARED
  2911. '**                tools.  The toolkit will do this for you.
  2912. '** In Symbols : 
  2913. '** Out Symbols: 
  2914. '**            
  2915. '** Arguments:  All parameters are **read only**. 
  2916. '**          prodno%: This is your prodno%.  It is assigned to you by the
  2917. '**                   toolkit in the order in which you were registered.
  2918. '**                   When your product is part of SmartSuite, SmartSuite
  2919. '**                   will always be product #1. (prodno% >=1)
  2920. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  2921. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  2922. '**                      then step backwards
  2923. '**    programgroup$: The name of the program group where the user chose to
  2924. '**                   install the program manager icons     
  2925. '**
  2926. '** Errors:    No return code for errors, you must Raise them
  2927. '** Author:    MZ
  2928. '** Returns:   return: gNEXT 
  2929. '**
  2930. '*************************************************************************
  2931.  
  2932. PUBLIC FUNCTION AddIconsLFS (prodno%, network$, direction$, programgroup$) AS STRING
  2933. DIM ripath$, exepath$, exename$, szArgument$, notused%, DirectoryPath$
  2934. DIM LanguageQualifier$, LanguageAcronym$, IconName$, LinkName$
  2935. '**//{{PYL_ADDED(CREATELFSFAXEXE)
  2936. DIM exePath2$, exeName2$, iconName2$, linkName2$, progfolderPath$
  2937. '**//}}PYL_ADDED
  2938. ' DIM workspace As New NotesUIWorkspace
  2939.  
  2940.    AddIconsLFS = direction$
  2941.    '' In the backwards case, keep backing up
  2942.    If direction$ = gBACK Then
  2943.       EXIT FUNCTION
  2944.    End If
  2945.  
  2946.     LanguageQualifier$ =  ""
  2947.     LanguageAcronym$ = GetSymbolValue(SYM_INSTALL_LANGUAGE$) 
  2948.     szArgument$ = "/L" + LanguageAcronym$ 
  2949.     exename$ = LdString(SID_LFS_LFSEXE)
  2950.     exepath$ = Lot_WhereIsFeature(prodno%, "LFSA", exename$)
  2951. '** If language install, add qualifier
  2952.     If GetListItem(SYM_INSTALLKINDS$, prodno%) = gLANGUAGEINSTALL$ Then _
  2953.             LanguageQualifier$ =  LanguageAcronym$
  2954.     
  2955.    '** Write entries in  Program Manager
  2956.    If Lot_IsTheFeatureInstalled("LFSA") <> FALSE Then
  2957.         IconName$ = "Domino Intranet Starter Pack Fax Server"+LanguageQualifier
  2958.         LinkName$ = IconName$ + ".LNK"
  2959.         IF IsNewShell() THEN
  2960.             notused%=Lot_AddLinkToFolder(prodno%, exepath$+exename$, LinkName$, _
  2961.             "LFS Program Description", szArgument$, exepath$)
  2962.             'To register a shortcut object for uninstall you use for the path the full path of the link file
  2963.             notused%=Lot_RegisterObject("LFSA", UNIN_CLASS_SHORTCUT$, Lot_GetProgFolder(prodno%)+LinkName$)
  2964.         ' Remove any icons from LFS1.1 and DFS4.5 beta
  2965.             progfolderPath$ = Lot_GetProgFolder(prodno%)
  2966.         ' check for these shortcuts and if they exist delete
  2967.             if DoesFileExist(progfolderPath$+"Lotus Fax Server.LNK",femExists) THEN
  2968.                 kill progfolderPath$+"Lotus Fax Server.LNK"
  2969.             End If
  2970.             if DoesFileExist(progfolderPath$+"Lotus Fax Server Fax Engine.LNK",femExists) THEN
  2971.                 kill progfolderPath$+"Lotus Fax Server Fax Engine.LNK"
  2972.             End If
  2973.             if DoesFileExist(progfolderPath$+"Domino Fax Server 4.5 .LNK",femExists) THEN
  2974.                 kill progfolderPath$+"Domino Fax Server 4.5 .LNK"
  2975.             End If
  2976.             if DoesFileExist(progfolderPath$+"Domino Fax Engine 4.5 .LNK",femExists) THEN
  2977.                 kill progfolderPath$+"Domino Fax Engine 4.5 .LNK"
  2978.             End If
  2979.             if DoesFileExist(progfolderPath$+"Domino Intranet Starter Pack Fax Server .LNK",femExists) THEN
  2980.                 kill progfolderPath$+"Domino Intranet Starter Pack Fax Server .LNK"
  2981.             End If
  2982.             if DoesFileExist(progfolderPath$+"Domino Intranet Starter Pack Engine .LNK",femExists) THEN
  2983.                 kill progfolderPath$+"Domino Intranet Starter Pack Fax Engine .LNK"
  2984.             End If
  2985.         ELSE
  2986.             CreateProgmanItem  programgroup$, IconName$,_
  2987.                               exepath$+exename$+ " " + szArgument$, "", cmoOverwrite
  2988.  
  2989.             'To register an icon object for uninstall the path is: ProgramGroup$\+
  2990.             '                                                      IconName
  2991.             notused%=Lot_RegisterObject("LFSA", UNIN_CLASS_ICON$,_
  2992.                                                  programgroup$+"\"+IconName$)
  2993.         END IF
  2994.  
  2995.         '**//{{PYL_ADDED(CREATELFSFAXEXE)
  2996.         exeName2$ = LdString(SID_LFS_LFSFAXEXE)
  2997.         exePath2$ = Lot_WhereIsFeature(prodno%, "LFSA", exeName2$)
  2998.         IconName2$ = "Domino Intranet Starter Pack Fax Engine"+LanguageQualifier
  2999.         LinkName2$ = IconName2$ + ".LNK"
  3000.         IF IsNewShell() THEN
  3001.             notused%=Lot_AddLinkToFolder(prodno%, exePath2$+exeName2$, LinkName2$, _
  3002.             "LFS Program Description", szArgument$, exePath2$)
  3003.             'To register a shortcut object for uninstall you use for the path the full path of the link file
  3004.             notused%=Lot_RegisterObject("LFSA", UNIN_CLASS_SHORTCUT$, Lot_GetProgFolder(prodno%)+LinkName2$)
  3005.         ELSE
  3006.             CreateProgmanItem  programgroup$, IconName2$,_
  3007.                               exepath2$+exename2$+ " " + szArgument$, "", cmoOverwrite
  3008.  
  3009.             'To register an icon object for uninstall the path is: ProgramGroup$\+
  3010.             '                                                      IconName2
  3011.             notused%=Lot_RegisterObject("LFSA", UNIN_CLASS_ICON$,_
  3012.                                                  programgroup$+"\"+IconName2$)
  3013.         END IF
  3014.         '**//}}PYL_ADDED
  3015.  
  3016.         'To register a file object for uninstall that is not in the inf but is created at install time to
  3017.         'be used by a feature
  3018.         'notused%=Lot_RegisterObject("LFSA", UNIN_CLASS_FILE$, FilePath$)
  3019.  
  3020.         'To register a file_group object for uninstall that is not in the inf but is created at install time to
  3021.         'be used by a feature of a product (that needs to be cleanup by uninstall).  
  3022.         'The FilePath$ is the full path to a directory including a wildcard (*) as a file name
  3023.         'notused%=Lot_RegisterObject("LFSA", UNIN_CLASS_FILE_GROUP$, FilePath$)
  3024.  
  3025.         'To register a directory object for uninstall that is not in the inf (as a destination directory) but is created 
  3026.         'at install time to be used by a feature of a product (that needs to be cleanup by uninstall).  
  3027.         'The DirectoryPath$ is the full path to the directory
  3028.         'notused%=Lot_RegisterObject("LFSA", UNIN_CLASS_DIRECTORY$, DirectoryPath$)
  3029.          
  3030.         'To register a directory object for uninstall that is not in the inf (as a destination directory) but is created 
  3031.         'at install time to be used by a feature of a product (that needs to be cleanup by uninstall).  
  3032.         'The DirectoryPath$ is the full path to the directory
  3033.         DirectoryPath$ = GetSymbolValue("LFSDIR")
  3034.         DirectoryPath$ = MakePath(DirectoryPath$, "queue")
  3035.         notused%=Lot_RegisterObject("LFSA", UNIN_CLASS_DIRECTORY$, DirectoryPath$)
  3036.  
  3037.    End If
  3038.  
  3039.    If Lot_IsTheFeatureInstalled("LFSTOP") <> FALSE Then
  3040.           'To register a registry key for uninstall to cleanup when a feature is uninstalled.  
  3041.           'The KeyString$ is the full Key specification:
  3042.           'HKEY_LOCAL_MACHINE\SOFTWARE\lOTUS\LFS\2.1
  3043.           'notused%=Lot_RegisterObject("LFSTOP", UNIN_CLASS_REGISTRY_KEY$, KeyString$)
  3044.  
  3045.           'To register a registry key Value for uninstall to cleanup when a feature is uninstalled.  
  3046.           'The KeyValueString$ is the full Key+SubKey+ValueName specification:
  3047.           'HKEY_LOCAL_MACHINE\SOFTWARE\Lotus\DFS\4.5\Description
  3048.           'notused%=Lot_RegisterObject("LFSTOP", UNIN_CLASS_REGISTRY_VALUE$, KeyValueString$)
  3049.  
  3050.           'To register a registry key hive for uninstall to cleanup when a feature is uninstalled (the complet
  3051.           ' hive will be deleted).  
  3052.           'The KeyHive$ is the full Key Hive specification:
  3053.           ' HKEY_LOCAL_MACHINE\SOFTWARE\LOTUS\LFS
  3054.           'notused%=Lot_RegisterObject("LFSTOP", UNIN_CLASS_REGISTRY_HIVE$, KeyHive$)
  3055.  
  3056.    End If
  3057.  
  3058. ' Add Databases to the Notes Workspace.
  3059. '    Call workspace.AddDatabase("","lfsadmin.nsf")
  3060. '    Call workspace.AddDatabase("","lfscover.nsf")
  3061. '    Call workspace.AddDatabase("","lfsforms.nsf")
  3062. '    Call workspace.AddDatabase("","lfstrans.nsf")
  3063. '    Call workspace.AddDatabase("","lfslog.nsf")
  3064. '    Call workspace.AddDatabase("","lfsfax.nsf")
  3065.  
  3066.  
  3067.  
  3068. SKIPCONFIG:
  3069.  
  3070. END FUNCTION
  3071.  
  3072.  
  3073.  
  3074. '*************************************************************************
  3075. '** FUNCTION PostSuccessRegLFS (prodno%, network$, direction$) AS STRING
  3076. '**
  3077. '** Purpose: If you need to launch something after install runs
  3078. '** In Symbols : 
  3079. '** Out Symbols: 
  3080. '**            
  3081. '** Arguments:  All parameters are **read only**. 
  3082. '**          prodno%: This is your prodno%.  It is assigned to you by the
  3083. '**                   toolkit in the order in which you were registered.
  3084. '**                   When your product is part of SmartSuite, SmartSuite
  3085. '**                   will always be product #1. (prodno% >=1)
  3086. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  3087. '**       direction$: gNEXT 
  3088. '**
  3089. '** Errors:    No return code for errors, you must Raise them
  3090. '** Author:    MMeth
  3091. '** Returns:   return: gNEXT 
  3092. '**
  3093. '*************************************************************************
  3094.  
  3095. PUBLIC FUNCTION PostSuccessRegLFS (prodno%, network$, direction$) AS STRING
  3096.  
  3097.    PostSuccessRegLFS = direction$
  3098.    '' In the backwards case, keep backing up
  3099.    If direction$ = gBACK Then
  3100.       EXIT FUNCTION
  3101.    End If
  3102.  
  3103. END FUNCTION
  3104.  
  3105.  
  3106. '********************************
  3107. '********************************
  3108. '** Product Specific Functions **
  3109. '********************************
  3110. '********************************
  3111.  
  3112. '*************************************************************************
  3113. '** FUNCTION GetLFSPathfromLotusIni() AS STRING
  3114. '**
  3115. '** Purpose: Gets the product dir path from Lotus.ini file, and searches for
  3116. '**          acronym.exe in the product dir path. 
  3117. '**            
  3118. '** Author:    JYOTI KEDIA, JMD
  3119. '** Arguments: None
  3120. '** Returns:   if acronym.exe does not exist in dir specified in lotus.ini, it
  3121. '**            returns "", otherwise returns the full path to the product.
  3122. '**            NOTE: changed to not include product name by JMD
  3123. '**                includes trailing backslash
  3124. '*************************************************************************
  3125.  
  3126. FUNCTION GetLFSPathfromLotusIni() AS STRING
  3127. DIM DestDir$, lotusinipath$, defdir$, temp%, ProdDir$, fullpath$, rv%
  3128. DIM szkey$, keyvalue$, nsize&, gbuf$, ret&
  3129.    DestDir$ = GetWindowsDir()
  3130.    lotusinipath$ = DestDir$ +"lotus.ini"
  3131.  
  3132.    if DoesFileExist(lotusinipath$,femExists) then
  3133.       defdir$ = GetIniKeyString(lotusinipath$,"Lotus Applications", "lfs")
  3134.       if defdir$ <> "" then
  3135.          temp% = INSTR(1,LCASE$(defdir$),"lfs.exe")
  3136.          if temp% <> 0 then
  3137.             ProdDir$ = MID$(defdir$,1,(temp%-1))
  3138.             if ProdDir$ <> "" then
  3139.                fullpath$ = ProdDir$ + "lfs.exe"
  3140.                if DoesFileExist(fullpath$, femExists) then
  3141.                   rv% = Lot_CleanPath(fullpath$)
  3142.                   GetLFSPathfromLotusIni = ProdDir$
  3143.                   EXIT FUNCTION
  3144.                end if 
  3145.             end if 
  3146.          end if 
  3147.       end if 
  3148.    end if
  3149.  
  3150.     '** Now try the registry
  3151.     szkey$ = "SOFTWARE\Lotus\" + _
  3152.         LTRIM$(LdString(SID_LFS_PROD_NAME)) + "\" + _
  3153.         LTRIM(LdString(SID_LFS_PROD_VER))
  3154.     keyvalue$ = "Path"
  3155.     ret& =  Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, szkey$, keyvalue$, 0, gbuf$, nsize&)
  3156.     IF gbuf$ <> "" THEN 
  3157.         GetLFSPathfromLotusIni = LTRIM$(gbuf$)
  3158.     ELSE    
  3159.         GetLFSPathfromLotusIni = ""
  3160.     END IF
  3161.  
  3162. END FUNCTION
  3163.  
  3164. PUBLIC FUNCTION InitLanguageLFS (prodno%, network$, direction$) AS STRING
  3165. '*************************************************************************
  3166. '** Purpose: Finds out the installed languages and determines the nature
  3167. '**  of the install.  If not running automated, displays a message box for
  3168. '**  a language install
  3169. '**  
  3170. '** Author: JMDonohue
  3171. '** Arguments:  All parameters are **read only**. 
  3172. '**          prodno%: This is your prodno%.  It is assigned to you by the
  3173. '**                   toolkit in the order in which you were registered.
  3174. '**                   When your product is part of SmartSuite, SmartSuite
  3175. '**                   will always be product #1. (prodno% >=1)
  3176. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  3177. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  3178. '**                      then step backwards
  3179. '**   
  3180. '** Returns:  (not used)
  3181. '**   
  3182. '**  Implicitly sets the following global symbols for later processing: 
  3183. '**   SYM_INSTALLKIND$
  3184. '**   SYM_INSTALLKINDS$ (list)
  3185. '**  Sets the following global symbols (based on product #1) for later 
  3186. '**  processing: 
  3187. '**   SYM_REG_PRODUCTNAME$
  3188. '**   SYM_REG_PRODUCTVER$
  3189. '*************************************************************************
  3190.    DIM szProductName$, szProductVersion$, szInstallKind$, szLanguageSubdir$ 
  3191.    szProductName$ =  LdString(SID_LFS_PROD_NAME)
  3192.    szProductVersion$ =  LdString(SID_LFS_PROD_VER)
  3193.     if prodno% = 1 THEN
  3194.         SetSymbolValue SYM_REG_PRODUCTNAME$ , szProductName$
  3195.         SetSymbolValue SYM_REG_PRODUCTVER$ , szProductVersion$ 
  3196.     END IF
  3197.    InitLanguages szProductName$, szProductVersion$, prodno%    
  3198.     InitLanguageLFS  = ""
  3199. END FUNCTION
  3200.  
  3201. '*************************************************************************
  3202. '** LFSMOREDIRSCB
  3203. '** Purpose:  This SUB handles the processing for the MORE DIRECTORIES    
  3204. '**           dialog.  
  3205. '**
  3206. '** IN SYMBOLS  handle to dialog, Control ID, Class, Instance
  3207. '**     
  3208. '** Author: Michael Natsis
  3209. '** Arguments:
  3210. '**     
  3211. '**     
  3212. '** Returns:
  3213. '**     
  3214. '*************************************************************************
  3215. SUB LFSMOREDIRSCB (hDlg&, CtrlId%, Classes$, LInst&)
  3216.    DIM dirChanged1%, dirChanged2%, dirChanged3%, i%, notused% 
  3217.    DIM drvSel%,Inst%, dirToChange1$, dirToChange2$,dirToChange3$
  3218.    STATIC drvIndex%(1 to MAX_NO_DRIVECOMBOS)
  3219.  
  3220.    Inst% = CINT(LInst&)
  3221.  
  3222.    SELECT CASE Classes$
  3223.     
  3224.       CASE "__DLGINIT"
  3225.  
  3226.     '** This is the directory for the Work Files
  3227.         Lot_GetDriveFreeSpaceList "IDC_COMBO1"
  3228.         SetListItem "IDC_EDIT", 1, GetSymbolValue("LFSWORKDIR")
  3229.         drvIndex%(1) = ValidateEditBox(hDlg& , 1)
  3230.         AddListItem SYM_UPDATELIST$, "IDC_EDIT1"
  3231.  
  3232.              
  3233.      '** This is the directory for the Smart Master Files
  3234.         Lot_GetDriveFreeSpaceList "IDC_COMBO2"
  3235.         SetListItem "IDC_EDIT", 2, GetSymbolValue("LFSMASTERSDIR")
  3236.         drvIndex%(1) = ValidateEditBox(hDlg& , 2)
  3237.         AddListItem SYM_UPDATELIST$, "IDC_EDIT2"
  3238.  
  3239.      '** This is the directory for the Backup Files
  3240.         Lot_GetDriveFreeSpaceList "IDC_COMBO3"
  3241.         SetListItem "IDC_EDIT", 3, GetSymbolValue("LFSBACKUPDIR")
  3242.         drvIndex%(1) = ValidateEditBox(hDlg& , 3)
  3243.         AddListItem SYM_UPDATELIST$, "IDC_EDIT3"
  3244.  
  3245.     ' You can also do this with a CASE statement i.e. CASE IDC_COMBO1 w/ SELECT CASE Inst%
  3246.  
  3247.                  CASE "IDC_COMBO1"
  3248.     ComboSelChanged 1 , Inst%
  3249.                  dirChanged1% = TRUE
  3250.  
  3251.     CASE "IDC_COMBO2"
  3252.             ComboSelChanged 2 , Inst%     
  3253.       dirChanged2% = TRUE
  3254.  
  3255.      CASE "IDC_COMBO3"
  3256.            ComboSelChanged 1 , Inst%
  3257.            dirChanged3% = TRUE
  3258.  
  3259.      CASE "IDC_BRWSDIR"
  3260.            drvSel% = ValidateBrowse(hDlg&,Inst%)
  3261.            SELECT CASE Inst%      
  3262.       
  3263.           CASE 1    
  3264.            dirChanged1% = TRUE
  3265.               
  3266.           CASE 2    
  3267.            dirChanged2% = TRUE
  3268.            
  3269.     CASE 3    
  3270.            dirChanged3% = TRUE
  3271.       
  3272.           END SELECT       
  3273.  
  3274.      CASE "IDC_EDIT"
  3275.      SELECT CASE Inst%
  3276.        CASE 1    
  3277.          dirChanged1% = TRUE            
  3278.                 
  3279.         CASE 2
  3280.          dirChanged2% = TRUE    
  3281.  
  3282.            CASE 3
  3283.              dirChanged3% = TRUE
  3284.             
  3285.      END SELECT
  3286.  
  3287.      CASE "IDC_OK"
  3288.          '** Validate Paths always: to check for a file with the same name
  3289.  
  3290.         '** WorkDir 
  3291.             drvSel% = ValidateEditBox(hDlg& , 1)
  3292.             IF drvSel% = 0 THEN
  3293.                 SetListItem "__LASTSTATUS", 1, "Q"
  3294.                 EXIT SUB
  3295.             ELSE 
  3296.                 drvIndex%(1) = drvSel%
  3297.             END IF
  3298.     dirToChange1$ = GetPathFromComboEdit(hDlg&, 1)
  3299.         IF ValidatePath(dirToChange1$) = FALSE THEN
  3300.         SetListItem "_LASTSTATUS",1,"Q"
  3301.         EXIT SUB
  3302.         ELSE
  3303.              SetSymbolValue "LFSWORKDIR", dirToChange1$
  3304.         END IF
  3305.  
  3306.  
  3307.         '** SMasters
  3308.             drvSel% = ValidateEditBox(hDlg& , 2)
  3309.             IF drvSel% = 0 THEN
  3310.                SetListItem "__LASTSTATUS", 1, "Q"
  3311.                EXIT SUB
  3312.             ELSE 
  3313.                drvIndex%(2) = drvSel%
  3314.             END IF
  3315.           dirToChange2$ = GetPathFromComboEdit(hDlg&, 2)
  3316.            IF ValidatePath(dirToChange2$) = FALSE THEN
  3317.         SetListItem "_LASTSTATUS",1,"Q"
  3318.         ELSE 
  3319.              SetSymbolValue "LFSMASTERSDIR", dirToChange2$
  3320.             END IF
  3321.  
  3322.  
  3323.         '** Backup
  3324.             drvSel% = ValidateEditBox(hDlg& , 3)
  3325.            IF drvSel% = 0 THEN
  3326.               SetListItem "__LASTSTATUS", 1, "Q"
  3327.               EXIT SUB
  3328.            ELSE 
  3329.               drvIndex%(3) = drvSel%
  3330.            END IF
  3331.             dirToChange3$ = GetPathFromComboEdit(hDlg&, 3)
  3332.           IF ValidatePath(dirToChange3$) = FALSE THEN
  3333.         SetListItem "_LASTSTATUS",1,"Q"
  3334.  
  3335.            ELSE 
  3336.              SetSymbolValue "LFSBACKUPDIR", dirToChange3$
  3337.            END IF 
  3338.  
  3339.      '** Refresh destination
  3340.      'Lot_RefreshDestination("LFSWORKDIR")
  3341.      'Lot_RefreshDestination("LFSMASTERSDIR")
  3342.      'Lot_RefreshDestination("LFSBACKUPDIR")
  3343.  
  3344. END SELECT   'Classes
  3345.  
  3346. END SUB
  3347.  
  3348.  
  3349. SUB LFS_RegisterSharedComponent(Key$, FileName$, Version$)
  3350. '*************************************************************************
  3351. '** Purpose:    This product routines registers the shared component for the
  3352. '**                product and writes an entry in cinstall.ini for uninstall
  3353. '**
  3354. '** IN SYMBOLS  handle to dialog, Control ID, Class, Instance
  3355. '**     
  3356. '** Author: Michael Natsis (stolen from flw.lss by JMD)
  3357. '** Arguments:
  3358. '**    Key$            Shared section keyword, "WIN32SHRSMARTICONPRG", e.g.
  3359. '**    FileName$    Name of shared component, "Icon Palette", e.g.
  3360. '**    Version$        Version of shared component, "6.0", e.g.
  3361. '**     
  3362. '*************************************************************************
  3363. DIM szProductName$, szProductVersion$, RegKeyName$
  3364.  
  3365. szProductName$ =  LdString(SID_LFS_PROD_NAME)
  3366. szProductVersion$ =  LdString(SID_LFS_PROD_VER)
  3367.  
  3368. IF Lot_IsTheFeatureInstalled(Key$) <> FALSE THEN
  3369.     RegKeyName$ = gREGLOTUS + szProductName$ + "\" + szProductVersion$ + _
  3370.      "\Components\" + FileName$ + "\" + Version$
  3371.     Lot_RegCreateKeyEx HKEY_LOCAL_MACHINE, RegKeyName$
  3372. END IF
  3373.  
  3374. END SUB
  3375.  
  3376. '****************************************************************************
  3377. '** FUNCTION DetectPreviousVersion ( Productfound$ ) AS STRING
  3378. '**
  3379. '** Purpose: Check Previous Version is install..
  3380. '**
  3381. '** Author:  schen 10/18/95 
  3382. '** Arguments: Productfound$ 
  3383. '** Returns:   YES or NO
  3384. '****************************************************************************
  3385. FUNCTION DetectPreviousVersion ( Productfound$ ) AS STRING
  3386. DIM destpath$, temp%, dirpath$, adwpath$, pathLFS$, LFSversion$ 
  3387. DIM lotusiniPath$,defdir$
  3388.  
  3389. lotusiniPath$ = GetWindowsDir() + "lotus.ini"
  3390.  
  3391. if DoesFileExist(lotusinipath$,femExists) then
  3392.    
  3393.    defdir$ = GetIniKeyString(lotusiniPath$,"Lotus Applications", "LFS")
  3394.    temp% = INSTR(1,LCASE$(defdir$),"release")
  3395.  
  3396.    if temp% <> 0 then
  3397.       LFSversion$ = MID$(defdir$,(temp%+8),3)
  3398.    end if          
  3399.  
  3400. else
  3401.    LFSversion$ = "0"
  3402. end if
  3403.  
  3404. destpath$ = GetLFSPathfromLotusIni()
  3405.  
  3406. If ( destpath$ <> "" ) then
  3407.  
  3408.    DetectPreviousVersion = "YES"
  3409.    if ( LFSversion$ <> "2.0" )Then
  3410.  
  3411.       Productfound = "True"
  3412.       SetSymbolValue "LFSOBSDIR1",  destpath$
  3413.       
  3414.    else 
  3415.       Productfound = "NO"
  3416.       SetSymbolValue "LFSOBSDIR1",LdString(SID_LFS_DIR) 
  3417.    
  3418.    end if    
  3419. Else     
  3420.      
  3421.    DetectPreviousVersion = "NO"
  3422.    Productfound = "NO"
  3423.    SetSymbolValue "LFSOBSDIR1",LdString(SID_LFS_DIR) 
  3424.  
  3425.  
  3426. End if
  3427.  
  3428.  
  3429. END FUNCTION
  3430.  
  3431.  
  3432. '****************************************************************************
  3433. '** SUB LFSRemoveObsoleteFiles(hDlg&, CtrlId%, Classes%, Inst&)
  3434. '**
  3435. '** Purpose: callback to handle Remove Files dialog.
  3436. '**
  3437. '** Author:  BMK 7/18/95 (significantly modified by TLB, and then jshaw)
  3438. '** Arguments: hDlg%, CtrlId%, Classes$, Inst%
  3439. '** Returns:   NONE
  3440. '****************************************************************************
  3441.  
  3442. SUB LFSRemoveObsoleteFiles(hDlg&, CtrlId%, Classes$, LInst&) 
  3443. DIM nSections%, count%, chpt$, sym$, notused%
  3444.  
  3445.     nSections% = 2
  3446.  
  3447.     SELECT CASE Classes$
  3448.         case "__DLGINIT"
  3449.             AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT1)
  3450.             AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT2)
  3451.             AddListItem SYM_UPDATELIST$, SYM_NORMALFONT$
  3452.         case "IDC_OK"
  3453.             for count% = 1 to nSections% 
  3454.                 sym$ = "LFSOBSFILES" + LTRIM$(STR$(count%))
  3455.                 chpt$ = Lot_GetChapterFromKeyWord (sym$)
  3456.                 if chpt$ <> "" then
  3457.                      notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 1)
  3458.                 end if
  3459.             next
  3460.         case "IDC_BACK"
  3461.             ' reset INF sections to OFF in case user changes his/her mind
  3462.             for count% = 1 TO nSections% 
  3463.                 sym$ = "LFSOBSFILES" + LTRIM$(STR$(count%))
  3464.                 chpt$ = Lot_GetChapterFromKeyWord(sym$)
  3465.                 if chpt$ <> "" then
  3466.                     notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 0)
  3467.                 end if                                                           
  3468.             next
  3469.         case "IDC_EXIT"
  3470.             ' reset INF sections to OFF in case user changes his/her mind
  3471.             for count% = 1 TO nSections% 
  3472.                 sym$ = "LFSOBSFILES" + LTRIM$(STR$(count%))
  3473.                 chpt$ = Lot_GetChapterFromKeyWord(sym$)
  3474.                 if chpt$ <> "" then
  3475.                     notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 0)
  3476.                 end if
  3477.             next
  3478.     END SELECT
  3479. END SUB
  3480.  
  3481.  
  3482. '*************************************************************************
  3483. FUNCTION Lot_WriteOLERegForLFS(network$, prodno%) AS INTEGER
  3484. '** Purpose:    This function writes OLE registration needed
  3485. '** Author:     Chuck Shubert (copying Paul Stefancyk (copying 1-2-3 code by MZ/MMeth))
  3486. '** Arguments:  
  3487. '** Returns:    SUCCESS
  3488. '** NOTE: This function is from flw.lss
  3489. '*************************************************************************
  3490. DIM ProgDir$, regFile, LFSreg, FoundPos,RegBuffer$
  3491. DIM LastCount, CopyDestDir$, ExecError%, OleRegPath$, LFSdir$, CommandLine$
  3492.  
  3493.     regFile = 114
  3494.     LFSreg =  117
  3495.  
  3496.     LFSdir$ = Lot_WhereIsFeature(prodno%, "LFSTOP", LdString(SID_LFS_LFSEXE))
  3497.     ProgDir$ = Lot_GetDestDirValueFromInstallIni("LFSDIR")
  3498.  
  3499.     CopyDestDir$ = GetSymbolValue("LFSDIR")
  3500.  
  3501.     OleRegPath$ = CopyDestDir$+"win32obj.reg" 
  3502.     IF DoesFileExist(OleRegPath$, femExists) <> TRUE THEN EXIT FUNCTION 
  3503.  
  3504.     OPEN OleRegPath$ FOR INPUT AS regFile
  3505.     OPEN CopyDestDir$+"LFS3.reg" FOR OUTPUT AS LFSreg
  3506.  
  3507.        Lot_RegisterObject "LFSTOP", UNIN_CLASS_FILE$, CopyDestDir$ + "LFS3.reg"
  3508.  
  3509.     RegBuffer$ = INPUT$(LOF(regFile), regFile)                      ' entire file.
  3510.     LastCount = 1
  3511. SearchLoop:
  3512.     FoundPos = INSTR(LastCount, RegBuffer$, "$$PRG")
  3513.     IF FoundPos = 0 THEN
  3514.         PRINT #LFSreg, Mid$(RegBuffer$, LastCount)
  3515.     ELSE
  3516.         PRINT #LFSreg, Mid$(RegBuffer$, LastCount, FoundPos-LastCount);
  3517.         LastCount = FoundPos+5                  ' skip token
  3518.         PRINT #LFSreg, ProgDir$;
  3519.         GOTO SearchLoop
  3520.     END IF
  3521.     CLOSE #regFile, #LFSreg
  3522.  
  3523. 'Don't need this version any more
  3524.     RemoveFile CopyDestDir$ + "win32obj.reg", cmoNone
  3525.  
  3526. ' register LFS3.REG, need extra quotes for long file names with spaces under Chicago
  3527.  
  3528.     IF WhatPlatform() = PLATFORM_WIN95 THEN
  3529.         CommandLine$ =     "regedit /s " +  """" + CopyDestDir$ + "LFS3.reg" + """"
  3530.     ELSE
  3531.         CommandLine$ =     "regedit /s " + CopyDestDir$ + "LFS3.reg"
  3532.     END IF
  3533.  
  3534.  
  3535.     ExecError% = WinExec (CommandLine$, SW_HIDE)
  3536.  
  3537.    Lot_WriteOLERegForLFS = SUCCESS
  3538.  
  3539. End Function
  3540.  
  3541. '*************************************************************************
  3542. '** PUBLIC SUB DB_LFSBACKUPMASTERSCB(hDlg%, CtrlId%, Classes$, Inst%) AS INTEGER
  3543. '**
  3544. '** Purpose: Handles Dialog for Backup of currently installed smasters
  3545. '**            
  3546. '** Author:    Michael Natsis
  3547. '** Arguments: hDlg%, CtrlId%, Classes$, Inst%
  3548. '** Returns:   SUCCESS
  3549. '*************************************************************************
  3550. 'PUBLIC SUB DB_LFSBACKUPMASTERSCB(hDlg&, CtrlId%, Classes$, Inst&)
  3551.  
  3552. 'LFSBACKUPMASTERSCB
  3553. '    SELECT CASE Classes$
  3554.             
  3555. '    CASE "IDC_OK"
  3556. '        LFSBackupSmartMasters% = TRUE
  3557. '    case "IDC_BACK"
  3558. '        LFSBackupSmartMasters% = FALSE
  3559. '    case "IDC_EXIT"
  3560. '        LFSBackupSmartMasters% = FALSE
  3561. '    END SELECT
  3562.         
  3563. 'END SUB
  3564.  
  3565. '**//{{PYL_ADDED(LFSNOTESDBCB)
  3566. '*************************************************************************
  3567. 'SUB LFSNOTESDBCB - Callback dialog proc for Notes LFS Mail File Dlg
  3568. '*************************************************************************
  3569. SUB LFSNOTESDBCB(hDlg&, CtrlId%, Classes$, LInst&)
  3570.    DIM notused%, i%, j%
  3571.    DIM numServers As INTEGER
  3572.    DIM bufLen as INTEGER
  3573.    DIM retVal,tempVal As INTEGER
  3574.    DIM n%
  3575.    DIM serverName As STRING 
  3576.    DIM serverList As STRING * 5120
  3577.    DIM tempStr$
  3578.    DIM SelItemIndex%
  3579.  
  3580.    bufLen = 5120
  3581.  
  3582. '   MessageBox "In the callback routine"
  3583. '   MessageBox Str(CtrlId%)&","&Classes$&","&Str(LInst&)
  3584.    SELECT CASE Classes$
  3585.  
  3586.     CASE "__DLGINIT"
  3587.  
  3588.         AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT1)
  3589.         AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT2)
  3590.         AddListItem SYM_UPDATELIST$, SYM_NORMALFONT$
  3591. 'Get the list of servers on all ports to populate the list box
  3592.  
  3593. '        MessageBox "Getting the list of servers"
  3594.          retVal = LFSGetServerList ("", numServers,serverList,bufLen)
  3595. '        MessageBox str(retVal)
  3596.  
  3597. '        MessageBox serverList,MB_OK,"List of Servers"
  3598. '        If retVal THEN
  3599. '            MessageBox "Error in getting ServerList"+retVal
  3600. '        Else
  3601. '            MessageBox serverList,MB_OK,"List of servers"
  3602. '        End If
  3603. '        MessageBox Str(numServers)
  3604.         j% = 0
  3605.         serverList = serverList & ","
  3606.         For i% = 1 To numServers-1
  3607.             serverName = Mid(serverList,j%+1,InStr(j%+1,serverList,",")-j%-1)
  3608.             j% = InStr(j%+1,serverList,",")
  3609.             SetListItem "IDC_COMBO1",i%,serverName
  3610.             SetListItem "IDC_COMBO2",i%,serverName
  3611.  '            MessageBox serverName,MB_OK,"Individual Server"
  3612.         Next
  3613.         SetListItem "IDC_EDIT", 1, mailserver$
  3614.         SetListItem "IDC_EDIT", 2, mailfile$
  3615.         SetListItem "IDC_EDIT", 3, admindbname$
  3616.         SetListItem "IDC_EDIT", 4, formsdbname$
  3617.         AddListItem SYM_UPDATELIST$, "IDC_COMBO1"
  3618.         AddListItem SYM_UPDATELIST$, "IDC_COMBO2"
  3619.  
  3620.         notused% = CINT(EnableWindow(GetDlgItem(hDlg&,IDC_EDIT1), TRUE))
  3621.         notused% = CINT(EnableWindow(GetDlgItem(hDlg&,IDC_EDIT2), TRUE))
  3622.         notused% = CINT(EnableWindow(GetDlgItem(hDlg&,IDC_EDIT3), TRUE))
  3623.         notused% = CINT(EnableWindow(GetDlgItem(hDlg&,IDC_EDIT4), TRUE))
  3624.         notused% = CINT(EnableWindow(GetDlgItem(hDlg&,IDC_COMBO1), TRUE))
  3625.         notused% = CINT(EnableWindow(GetDlgItem(hDlg&,IDC_COMBO2), TRUE))
  3626.         
  3627.  
  3628.         AddListItem SYM_UPDATELIST$, "IDC_EDIT1"
  3629.         AddListItem SYM_UPDATELIST$, "IDC_EDIT2"
  3630.         AddListItem SYM_UPDATELIST$, "IDC_EDIT3"
  3631.         AddListItem SYM_UPDATELIST$, "IDC_EDIT4"
  3632.  
  3633.  
  3634.  
  3635.  
  3636.     CASE "IDC_EDIT"
  3637.         FOR i% = 1 TO 4
  3638.             IF LEN(GetListItem ("IDC_EDIT", i%)) < 1 THEN
  3639.                 notused% = CINT(EnableWindow(GetDlgItem(hDlg&,IDC_OK), FALSE))
  3640.             ELSE
  3641.                 notused% = CINT(EnableWindow(GetDlgItem(hDlg&,IDC_OK), TRUE))
  3642.             END IF
  3643.         NEXT
  3644.  
  3645.     CASE "IDC_COMBO1"
  3646.         SelItemIndex% = LInst&
  3647. '        MessageBox Str(SelItemIndex%) 
  3648.         IF (SelItemIndex% >= 0)    THEN
  3649.             adminserver$ = GetListItem("IDC_COMBO1",SelItemIndex%)
  3650.         End If
  3651. '        MessageBox adminserver$
  3652.  
  3653.     CASE "IDC_COMBO2"
  3654.         SelItemIndex% = LInst&
  3655. '        MessageBox Str(SelItemIndex%) 
  3656.         IF (SelItemIndex% >= 0) THEN
  3657.             formsserver$ = GetListItem("IDC_COMBO2",SelItemIndex%)
  3658.         End If
  3659. '        MessageBox formsserver$
  3660.  
  3661.     CASE "IDC_OK"
  3662. '        FOR i% = 1 TO 9
  3663.         FOR i% = 1 TO 4
  3664.             IF LEN(GetListItem ("IDC_EDIT", i%)) < 1 THEN
  3665.                 ErrorMsgNoDlgExit SID_TKT_ERR_NEEDNAMES, ""
  3666.                 EXIT FOR
  3667.             END IF
  3668.         NEXT
  3669.  
  3670.         mailserver$ = GetListItem("IDC_EDIT", 1)
  3671.         mailserver$ = LCase$(Trim$(mailserver$))
  3672.         mailfile$ = GetListItem("IDC_EDIT", 2)
  3673.         mailfile$ = LCase$(Trim$(mailfile$))
  3674.         admindbname$ = GetListItem("IDC_EDIT", 3)
  3675.         admindbname$ = LCase$(Trim$(admindbname$))
  3676.         formsdbname$ = GetListItem("IDC_EDIT", 4)
  3677.         formsdbname$ = LCase$(Trim$(formsdbname$))
  3678. '        MessageBox "Before: admin, forms: "+adminserver$+"  "+formsserver$
  3679. '        notused% = GetDlgItemText(hDlg&,IDC_COMBO1,adminserver$,64)
  3680. '        notused% = GetDlgItemText(hDlg&,IDC_COMBO2,formsserver$,64)
  3681. '        MessageBox "After: admin, forms: "+adminserver$+"  "+formsserver$
  3682.  
  3683.         logserver$ = ""
  3684.         transserver$ = ""
  3685.         coverserver$ = ""
  3686.         faxqserver$ = ""
  3687.  
  3688.     CASE "IDC_BACK"
  3689.         
  3690.    END SELECT   
  3691.  
  3692. END SUB
  3693. '**//}}PYL_ADDED
  3694.  
  3695. '**//{{PKK_ADDED(LFSNOTESDBCB)
  3696.  
  3697. '*************************************************************************
  3698. 'SUB LFSDOMINONOTESDBCB - Callback dialog proc for Notes LFS Mail File Dlg
  3699. '*************************************************************************
  3700. SUB LFSDOMINONOTESDBCB(hDlg&, CtrlId%, Classes$, LInst&)
  3701.    DIM notused%, i%, j%
  3702.    DIM numServers As INTEGER
  3703.    DIM bufLen as INTEGER
  3704.    DIM retVal,tempVal As INTEGER
  3705.    DIM n%
  3706.    DIM serverName As STRING 
  3707.    DIM serverList As STRING * 5120
  3708.    DIM tempStr$
  3709.    DIM SelItemIndex%
  3710.  
  3711. '   MessageBox "I should be coming here???????"
  3712.    
  3713.    bufLen = 5120
  3714.  
  3715. '   MessageBox Str(CtrlId%)&","&Classes$&","&Str(LInst&)
  3716.  
  3717.    SELECT CASE Classes$
  3718.  
  3719.     CASE "__DLGINIT"
  3720.  
  3721.         AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT1)
  3722.         AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT2)
  3723.         AddListItem SYM_UPDATELIST$, SYM_NORMALFONT$
  3724.  
  3725.         SetListItem "IDC_EDIT", 1, mailserver$
  3726.         SetListItem "IDC_EDIT", 2, mailfile$
  3727.  
  3728.         notused% = CINT(EnableWindow(GetDlgItem(hDlg&,IDC_EDIT1), TRUE))
  3729.         notused% = CINT(EnableWindow(GetDlgItem(hDlg&,IDC_EDIT2), TRUE))
  3730.         
  3731.  
  3732.         AddListItem SYM_UPDATELIST$, "IDC_EDIT1"
  3733.         AddListItem SYM_UPDATELIST$, "IDC_EDIT2"
  3734.  
  3735.  
  3736.  
  3737.  
  3738.     CASE "IDC_EDIT"
  3739.         FOR i% = 1 TO 2
  3740.             IF LEN(GetListItem ("IDC_EDIT", i%)) < 1 THEN
  3741.                 notused% = CINT(EnableWindow(GetDlgItem(hDlg&,IDC_OK), FALSE))
  3742.             ELSE
  3743.                 notused% = CINT(EnableWindow(GetDlgItem(hDlg&,IDC_OK), TRUE))
  3744.             END IF
  3745.         NEXT
  3746.  
  3747.  
  3748.     CASE "IDC_OK"
  3749.         FOR i% = 1 TO 2
  3750.             IF LEN(GetListItem ("IDC_EDIT", i%)) < 1 THEN
  3751.                  ErrorMsgNoDlgExit SID_TKT_ERR_NEEDNAMES, ""
  3752.                  EXIT FOR
  3753.             END IF
  3754.         NEXT
  3755.  
  3756. '        MessageBox "We are at the beginning of dominoserver stuff"
  3757.  
  3758.         mailserver$ = GetListItem("IDC_EDIT", 1)
  3759.         mailserver$ = LCase$(Trim$(mailserver$))
  3760.         mailfile$ = GetListItem("IDC_EDIT", 2)
  3761.         mailfile$ = LCase$(Trim$(mailfile$))
  3762.         adminserver$ = LCase$(dominoserver$)
  3763.         formsserver$ = LCase$(dominoserver$)
  3764.         logserver$ = LCase$(dominoserver$)
  3765.         transserver$ = LCase$(dominoserver$)
  3766.  
  3767. '        MessageBox "DominoServerName = "+dominoserver$+"Admin,forms,log,transServers: "+adminserver$+formsserver$+logserver$+transserver$
  3768.         webfaxdbname$ = "webfax.nsf"
  3769.  
  3770.         coverserver$ = ""
  3771.         faxqserver$ = ""
  3772.  
  3773.     CASE "IDC_BACK"
  3774.         
  3775.    END SELECT   
  3776.  
  3777.  
  3778. END SUB
  3779.  
  3780. '*************************************************************************************************************
  3781. ' Callback routine for the dialog box LFSDODOMINO
  3782. '*************************************************************************************************************
  3783.  
  3784. SUB LFSDODOMINOCB(hDlg&, CtrlId%, Classes$, LInst&)
  3785. DIM notused%, i%
  3786.  
  3787.   SELECT CASE Classes$
  3788.  
  3789.       CASE "__DLGINIT"
  3790.  
  3791. '        AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT1)
  3792.         AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT2)
  3793.         AddListItem SYM_UPDATELIST$, SYM_NORMALFONT$
  3794.         SetListItem "IDC_EDIT", 1, ""
  3795. '        MessageBox "In DlgInit of LFSDODOMINOCB"
  3796.  
  3797.         notused% = CINT(EnableWindow(GetDlgItem(hDlg&,IDC_EDIT1), TRUE))
  3798.  
  3799.         AddListItem SYM_UPDATELIST$, "IDC_EDIT1"
  3800.  
  3801.       CASE "IDC_CONTINUE"
  3802. '        MessageBox "In IDC_OK of LFSDODOMINOCB"
  3803.         dominoserver$ = ""
  3804.         dominoserver$ = GetListItem("IDC_EDIT", 1)
  3805.         dominoserver$ = Trim(dominoserver$)
  3806. '        MessageBox "DominoServerName is "+dominoserver$
  3807.         If LEN(dominoserver$) > 0 Then
  3808.             DoDomino = -1
  3809.         Else
  3810.             DoDomino = 0
  3811.         End If
  3812.       CASE "IDC_BACK"
  3813.     
  3814.   END SELECT
  3815.  
  3816. END SUB
  3817. '**************************************************************************************************************
  3818. ' Removes the NT Service (FaxManager) and NT Device ($devfax0)
  3819. '**************************************************************************************************************
  3820. SUB RemoveDevAndService
  3821.     DIM cmdLineDrv As STRING * 50
  3822.     DIM cmdLineSrv As STRING * 50
  3823.     DIM cmdNetStop As STRING * 50
  3824.  
  3825.     cmdLineDrv$ = "INSTDRV $devfax0 remove"
  3826.     cmdLineSrv$ = "INSTSRV faxmanager remove"
  3827.     cmdNetStop  = "NET STOP FAXMANAGER"
  3828.  
  3829.     If WinExec(cmdNetStop$, 0) < 32    Then
  3830.         MessageBox "Could not stop the faxmanager service, if it is installed then please remove it before proceeding"
  3831. '    Else
  3832. '        MessageBox "Successfully removed the device driver $devfax0 from the NT Devices"
  3833.     End If
  3834.  
  3835.     If WinExec(cmdLineDrv$, 0) < 32    Then
  3836.         MessageBox "Could not remove the device driver $devfax0, if it is installed then please remove it before proceeding"
  3837. '    Else
  3838. '        MessageBox "Successfully removed the device driver $devfax0 from the NT Devices"
  3839.     End If
  3840.  
  3841.     If WinExec(cmdLineSrv, 0) < 32 Then
  3842.         MessageBox "Could not remove the faxmanager Service, if it is installed then please remove it before proceeding"
  3843. '    Else
  3844. '        MessageBox "Successfully removed the faxmanager Service from the NT Services"
  3845.     End If
  3846.  
  3847. END SUB
  3848.  
  3849. '**************************************************************************************************************
  3850. ' This sub removes LFS1.1 if it is on the machine.
  3851. '**************************************************************************************************************
  3852. SUB RemoveLFS11
  3853.     ' Check to see if LFS.INI exists, if yes then get the Install_dir else return because there is nothing to remove.
  3854.     DIM lfsIniPath As STRING
  3855.     DIM InstallDirPath As STRING
  3856.     DIM PixtranPath As STRING
  3857.     DIM oldPixPath As STRING
  3858.     DIM notused%
  3859.     recursiveCount% = 0
  3860.     lfsIniPath$ = GetWindowsDir() + "LFS.INI"
  3861.     if DoesFileExist(lfsIniPath$,femExists) then
  3862.            if DoesIniKeyExist(lfsIniPath$,"LFS","INSTALL_DIR") THEN
  3863.               InstallDirPath$ = GetIniKeyString(lfsIniPath$,"LFS", "INSTALL_DIR")
  3864. '        MessageBox "The LFS1.1 Install dir = "+InstallDirPath$
  3865.            Else
  3866.         MessageBox "Unable to find the Install Directory for LFS 1.1, giving up on attempt to remove LFS 1.1"
  3867.               Exit Sub  'Install Dir information is unavailable. We cannot continue
  3868.            End If
  3869.     Else
  3870.         Exit Sub
  3871.     End If
  3872.  
  3873.     ' Move the files in Windows\system32\PIXTRAN directory to Windows\System32\OLDPIX
  3874.     PixtranPath$ = GetWindowsDir() + "PIXTRAN"
  3875.     oldPixPath$  = GetWindowsDir() + "OLDPIX"
  3876. '    MessageBox "PixTranDirectory = "+PixtranPath$+", OldPix Path = "+oldPixPath$
  3877.     RenameDir PixTranPath$,oldPixPath$
  3878. '    MessageBox "Succeeded in moving files from PIXTRAN directory to OldPix directory both are under Windows\system32"
  3879.     ' Put up a warning message and then Nuke the Install_dir
  3880. '    MessageBox "We are about to remove the "+InstallDirPath$+" which contains LFS 1.1, If you wish to save any of the files "+_
  3881. '               "in that directory the please switch to FileManger and move those files out to another location before click OK"
  3882.     If WinExec("delTree /y "+InstallDirPath$,0) < 32 Then
  3883.         MessageBox "Failed to remove the "+InstallDirPath$
  3884. '    Else
  3885. '        MessageBox "Successfully removed "+InstallDirPath$+" directory"
  3886.     End If
  3887. END SUB
  3888.  
  3889.  
  3890. ' ***********************************************************************************************************************
  3891.  
  3892.  
  3893. SUB LFSNotesDBUpgradeCB(hDlg&, CtrlId%, Classes$, LInst&)
  3894. DIM notused%, i%
  3895. DIM message AS STRING
  3896. '  MessageBox "In Callback routine"+Classes$+" "+STR(CtrlId%)
  3897.   SELECT CASE Classes$
  3898.       CASE "__DLGINIT"
  3899. '        MessageBox "In DLGINIT Case "+NameOfDBtoUpgrade$+" "+ServerOfDBtoUpgrade
  3900.         AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT1)
  3901.         AddListItem SYM_UPDATELIST$, SYM_NORMALFONT$
  3902.  
  3903.         message = NameOfDBtoUpgrade$
  3904.         if LEN(TRIM$(ServerOfDBtoUpgrade$)) > 0 THEN
  3905.             message = message+" on the server "+ServerOfDBtoUpgrade$
  3906.         Else
  3907.             message = message+" on the Local System"
  3908.         End If
  3909. '        MessageBox message$
  3910.  
  3911.         SetListItem "IDC_TEXT",1,message
  3912.         AddListItem SYM_UPDATELIST$, "IDC_TEXT1"
  3913.         SetListItem "IDC_TEXT",2,newServerName$
  3914.         AddListItem SYM_UPDATELIST$, "IDC_TEXT2"
  3915.         DBUpgradeOverwriteCancel% = 0
  3916.  
  3917.  
  3918.       CASE "IDC_OK"        
  3919. '            MessageBox "In IDC_OK (Upgrade) of LFSNotesDBUpgradeCB"
  3920.             DBUpgradeOverwriteCancel% = 1
  3921.       CASE "IDC_CONTINUE"
  3922. '            MessageBox "In IDC_CONTINUE (Overwrite) of LFSNotesDBUpgradeCB"    
  3923.             DBUpgradeOverwriteCancel% = 2
  3924.  
  3925.       CASE "IDC_BACK"                                    'Means Leave the DB untouched
  3926. '            MessageBox "In IDC_CANCEL (Leave untouched) of LFSDODOMINOCB"
  3927.             DBUpgradeOverwriteCancel% = 3
  3928.     
  3929.   END SELECT
  3930.   NameOfDBtoUpgrade$ = ""
  3931.   ServerOfDBtoUpgrade$ = ""
  3932.  
  3933. END SUB
  3934.  
  3935. '************************************************************************************************************
  3936. 'This routines renames an existing directory
  3937. '************************************************************************************************************
  3938. SUB renameDir(sourceDir As STRING, destDir As STRING)
  3939.     if DoesFileExist(sourceDir$,femExists) Then
  3940.         Name sourceDir$ As destDir$
  3941.     End If
  3942. END SUB
  3943. '**//}}PKK_ADDED
  3944.